尝试在VDI环境中编写基于位置的打印脚本。登录VDI会话后,将根据客户端(瘦/零客户端)IP(使用GPO)映射网络打印机。基于该打印机名称(即'PRN-Printer1'),我需要将文件从共享(\ Server \ share \ printer1)复制到本地c:\ drive \ location。对于'PRN-Printer2',它将从\ Server \ share \ printer2等复制。
我发现一些脚本检查了reg键,另一个脚本复制了文件,但我需要一些帮助将它们放在一起。我不是脚本专家,但我可以通过一些内容来摸索。
非常感谢任何帮助!!!
这是我到目前为止所拥有的......
检查注册表(不确定这是查找密钥的最佳方式)
reg query HKLM\SYSTEM\CurrentControlSet\Control\Print\Printers /f "PRN-" /t REG_SZ /s /k | find "Name"
或
pushd;sl HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers; if(test-path PRN-){--???--}ELSE{"Printer does not exist"};popd
复制文件:
ls "C:\drive\location" -r -i * | % {cp -force $_ ($_ -replace "c:\\drive\\location", "\\Server\share1")}
或
Copy-Item \\Server\Share\printer1\* C:\drive\location\
由于VDI会话中可能有多台打印机,因此不确定如何将此逻辑放在一起或检查注册表中此打印机的最佳方法。
基本上,我需要做的事情:
如果reg键(HCLM ..)是'PRN-printer1',则将文件\ Server \ share \ printer1复制到c:\ drive \ location else ...检查printer2 .... printer3 .. .etc ...
请帮忙!谢谢!
答案 0 :(得分:0)
您可以使用Get-Item获取所有打印机的列表,并将其存储在变量$ printername
中$printername=(Get-Item "HKLM:\SYSTEM\CurrentControlSet\Control\Print\Printers\*").pschildname
下面是你在$ printername中的内容
PRN-printer1
PRN-printer2
PRN-printer3
现在,对于$ printername中的每台$打印机,您可以执行以下脚本来根据打印机复制文件
ForEach($printer in $printername) {
if ($p -match "PRN-printer1")
{
Copy-Item "\\Server\Share\printer1\*" "C:\drive\location"
}
elseif ($p -match "PRN-printer1")
{
Copy-Item "\\Server\Share\printer2\*" "C:\drive\location"
}
elseif ($p -match "PRN-printer1")
{
Copy-Item "\\Server\Share\printer2\*" "C:\drive\location"
}
}