PowerShell远程输出设备OS信息到文件报错,请求排查原因
PowerShell远程获取系统信息写入本地文件错误排查
错误原因
远程执行的ScriptBlock运行在目标机器的PowerShell上下文里,本地定义的$file变量默认不会被传递到远程环境,导致远程执行Out-File时-FilePath参数为null,触发参数验证错误。另外就算变量能传递,远程机器也未必有权限访问你的本地C:\reports路径,直接在远程写入本地文件本身就不合理。
修复方案
方案一:远程获取数据,本地统一写入(推荐)
把Out-File移到本地执行,远程只负责返回数据,本地汇总后写入文件,避免跨机器路径访问问题:
$devices=("wsu1","wsu2") $file="C:\reports\file.txt" # 远程获取数据,本地接收后写入文件 Invoke-Command -ComputerName $devices -ScriptBlock { Get-WmiObject Win32_OperatingSystem | Select PSComputerName, Caption, OSArchitecture, Version, BuildNumber } | Out-File -FilePath $file & explorer.exe "C:\reports\"
方案二:传递本地变量到远程(需解决路径访问问题)
如果一定要在远程写入(不推荐),可以用$using:前缀引用本地变量,但要确保远程机器能访问你的本地文件路径(比如将C:\reports设置为共享,路径改为网络共享路径):
$devices=("wsu1","wsu2") # 改用网络共享路径,确保远程机器能访问 $file="\\你的本地机器名\reports\file.txt" Invoke-Command -ComputerName $devices -ScriptBlock { Get-WmiObject Win32_OperatingSystem | Select PSComputerName, Caption, OSArchitecture, Version, BuildNumber | Out-File -FilePath $using:file } & explorer.exe "C:\reports\"
错误信息翻译
无法将参数绑定到参数“FilePath”,因为该参数为 null。
+ CategoryInfo : InvalidData: (:) [Out-File], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.OutFileCommand
内容的提问来源于stack exchange,提问作者Nick S
相关产品推荐
相关产品推荐

