我正在使用Get-WindowsAutopilotInfo生成计算机的序列号和哈希码,并将该信息导出为CSV。
这是我通常使用的代码:
new-item "c:\Autopilot_Export" -type directory -force
Set-Location "C:\Autopilot_Export"
Get-WindowsAutopilotInfo.ps1 -OutputFile Autopilot_CSV.csv
Robocopy C:\Autopilot_Export \\Zapp\pc\Hash_Exports /copyall
这C:\Autopilot_Export
会将名为“ Autopilot_CSV.csv”的CSV文件输出到该目录,然后Robocopy将其复制到上面列出的Hash_Exports文件夹内的Network Share驱动器中。在上面的代码中,如果我手动输入“ test”,“ 123”,“ ABC”等并替换为“ Autopilot_CSV”,它也会在所有这些名称下输出CSV。因此,看起来Get-WindowsAutopilotInfo将创建一个CSV文件,并使用传递给它的任何字符串保存文件名。伟大的。
但是,我在多台不同的计算机上运行此脚本,并且希望将导出的CSV命名为运行该计算机的机器的唯一名称,以便在复制后可以轻松地对其进行识别。我试图将环境变量的值$env:computername
作为CSV的字符串输入传递,但它不起作用。
这是我要使用的代码:
new-item "c:\Autopilot_Export" -type directory -force
Set-Location "C:\Autopilot_Export"
Get-WindowsAutopilotInfo.ps1 -OutputFile $env:computername.csv
Robocopy C:\Autopilot_Export C:\Users\danieln\Desktop /copyall
此代码根本不会生成CSV文件。为什么不?
我是否对Powershell中如何使用环境变量有基本的误解?$env:computername
似乎返回了计算机名称的字符串,但是我无法将其传递到Get-WindowsAutopilotInfo并将其保存,但是如果我手动输入字符串作为输入,它将可以工作。
我也尝试将其设置为变量$computername = [string]$env:computername
,$computername
然后在.CSV之前传入,这似乎也不起作用。根据文档,环境变量显然已经是字符串。
我想念什么吗?
谢谢!
双引号似乎有效。冒号在powershell参数中是特殊的。
echo hi | set-content "$env:computername.csv"
dir
Directory: C:\users\me\foo
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2/11/2021 1:02 PM 4 COMP001.csv
冒号很特别。例如在开关参数中:
get-childitem -force:$true
实际上,它正在尝试查找名为csv的属性:
echo hi | Set-Content $env:COMPUTERNAME.length
dir
Directory: C:\Users\me\foo
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2/11/2021 3:04 PM 4 8
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句