0

新しいファイルにデータを書き込むときに奇妙な問題が発生します。Create-VMwareconf() 関数を使用して解析し、データを返すデータを含むディレクトリ内のファイルのリストがあります。これにより、$t に割り当てたハッシュテーブルのデータが返されます。$t 関数から目的のフォルダーとファイル名を取得しましたが、ループを開始するたびに、最初のフォルダー作成で次のエラーが発生し、2 番目と 3 番目は正常に動作します。興味深いことに、最初のファイルにあるはずのデータが 2 番目のフォルダーに存在します。

スクリプトを再度実行すると、3 つのオブジェクトすべてが生成されますが、ファイル名と一致するファイル内のデータの順序が正しくありません。

次のエラーを停止する方法について、助けをいただければ幸いです。

$e = (Get-Childitem ".\a\*\*.ini")
Set-Location "C:\WindowsRoot\vmwareconfigfiles\"
ForEach($d in $e){
$vmwaredirectory = New-item -type directory -path .\ -name $dd -Force
$vmwarefile = New-Item -type file -path $vmwaredirectory -name $dd -Force
$t = Create-VMwareconf($d)
$dd = $t.Value["0"]

#Write contents to new file
$t | Out-File $vmwarefile
}

最初の実行でエラーを受け取りました。

New-Item : パス「C:\WindowsRoot\vmwareconfigfiles」へのアクセスが拒否されました。At C:\WindowsRoot\parsedisrec.ps1:93 char:15 + $vmwarefile = New-Item -type file -path $vmwaredirectory -name $dd -Force + ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: ( C:\WindowsRoot\vmwareconfigfiles:String) [New-Item], UnauthorizedAccessException + FullyQualifiedErrorId : NewItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.NewItemCommand

Out-File : null であるため、引数をパラメーター 'FilePath' にバインドできません。C:\WindowsRoot\parsedisrec.ps1:97 文字:15 + $t | Out-File $vmwarefile + ~~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [Out-File], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.OutFileCommand

4

1 に答える 1

1

New-Item -Type file$ddはまだ初期化されていないため、最初の反復中に失敗するため、現在のディレクトリと同じ名前のファイルを作成しようとしています。名前として$null(または)を使用した場合、同じ結果が得られます。.

PS C:\> New-Item -Type file -Path 'C:\some\where' -Name $null -Force
New-Item : Access to the path 'C:\some\where' is denied.
At line:1 char:1
+ New-Item -Type file -Path 'C:\some\where' -Name $null -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (C:\some\where:String) [New-Item], UnauthorizedAccessException
    + FullyQualifiedErrorId : NewItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.NewItemCommand

PS C:\> New-Item -Type file -Path 'C:\some\where' -Name '.' -Force
New-Item : Access to the path 'C:\some\where' is denied.
At line:1 char:1
+ New-Item -Type file -Path 'C:\some\where' -name '.' -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (C:\some\where\.:String) [New-Item], UnauthorizedAccessException
    + FullyQualifiedErrorId : NewItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.NewItemCommand

これを変える:

ForEach($d in $e){
  $vmwaredirectory = New-item -type directory -path .\ -name $dd -Force
  $vmwarefile = New-Item -type file -path $vmwaredirectory -name $dd -Force
  $t = Create-VMwareconf($d)
  $dd = $t.Value["0"]

これに:

ForEach($d in $e){
  $t = Create-VMwareconf($d)
  $dd = $t.Value["0"]
  $vmwaredirectory = New-item -type directory -path .\ -name $dd -Force
  $vmwarefile = New-Item -type file -path $vmwaredirectory -name $dd -Force
于 2013-08-27T18:06:50.270 に答える