我正在编写一个自动化脚本,在其中,我将操作记录到文本文件中。我使用以下内容生成了 $logFile 名称:
$logFile = "\\server\e$\LogPath\log-$(Get-Date -Format 'yyMMdd-HHmmss').log"
然后我使用以下语法写入日志文件:
"Beginning migrations..." | Out-File -FilePath $logFile
这工作正常,我可以在生成的日志文件中看到输出。但是,一旦我设置好一切,我就会进入 foreach 循环来完成实际工作,并记录正在发生的事情,如下所示:
foreach ($system in $systemList) {
if ($address = Resolve-DnsName -Name $system) {
"test" | Out-File FilePath $logFile -Append
"Hostname $system resolves to $($address.IPAddress -join ',')" | Out-File FilePath $logFile -Append
}
}
此时,脚本开始抱怨文件名字符串编码:
Out-File : Cannot validate argument on parameter 'Encoding'. The argument "\\server\e$\LogPath\log-180719-101053.log" does not belong to the set "unknown,string,unicode,bigendianunicode,utf8,utf7,utf32,ascii,default,oem" specified by the
ValidateSet attribute. Supply an argument that is in the set and then try the command again.
At C:\users\username\SharePoint\Site\Path\script.ps1:133 char:32
+ "test" | Out-File FilePath $logFile -Append
+ ~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Out-File], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.OutFileCommand**strong text**
谁能告诉我我做错了什么以及如何解决这个问题?
答案1
您缺少-
之前的内容FilePath
,因此FilePath
字符串绑定到第一个位置参数,而$logfile
绑定到第二个位置参数,即Encoding
。