将数据写入新文件时遇到一个奇怪的问题。我有一个目录中的文件列表,其中包含我正在使用Create-VMwareconf()函数解析和返回数据的数据。这将返回我已分配给$ t的哈希表中的数据。我从$ t函数中提取了所需的文件夹和文件名,但是每次开始循环时,我都会在初始文件夹创建时遇到以下错误,第二次和第三次正常工作。有趣的是,应该在第一个文件中的数据存在于第二个文件夹中。
如果我再次运行脚本,它会生成所有三个对象,但与文件名匹配的文件中的数据序列不正确。
如何停止以下错误,将不胜感激;
$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'。 在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:无法将参数绑定到参数'FilePath',因为它为null。 在C:\ WindowsRoot \ parsedisrec.ps1:97 char:15 + $ t | Out-File $ vmwarefile + ~~~~~~~~~~~ + CategoryInfo:InvalidData :( :) [Out-File],ParameterBindingValidationException + FullyQualifiedErrorId:ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.OutFileCommand
答案 0 :(得分: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