2012-06-23 69 views
0

尝试写基于位置的打印脚本在VDI环境。登录到VDI会话后,网络打印机将根据客户端(瘦客户端/零客户端)IP(使用GPO)进行映射。基于该打印机名称(即'PRN-Printer1'),我需要将共享文件(\ Server \ share \ printer1)复制到本地c:\驱动器\位置。对于'PRN-Printer2',它将从\ Server \ share \ printer2等拷贝。PowerShell脚本来检查REG键和复制文件或文件夹的位置

我发现了几个脚本检查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',那么文件(S)\服务器\共享\ PRINTER1复制到C:\还有驱动器\位置...检查PRINTER2 .... printer3 ...等...

请帮帮忙!谢谢!

回答

0

可以使用Get-项目来获取所有的打印机列表并将其存储在一个变量$打印机名称

$printername=(Get-Item "HKLM:\SYSTEM\CurrentControlSet\Control\Print\Printers\*").pschildname 

下面有什么,你会在$打印机名称现在

PRN-printer1 
PRN-printer2 
PRN-printer3 

每个$在$打印机打印机名称可以执行以下脚本复制文件基于打印机

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" 

} 

} 
相关问题