【问题标题】:Powershell script to check for reg key and copy a file or folder to location用于检查 reg 密钥并将文件或文件夹复制到位置的 Powershell 脚本
【发布时间】:2012-06-25 13:42:50
【问题描述】:

尝试在 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 key (HCLM..) 是“PRN-printer1”,则将文件 \Server\share\printer1 复制到 c:\drive\location else... 检查打印机 2....printer3..等等……

请帮忙!谢谢!

【问题讨论】:

    标签: powershell batch-file registry


    【解决方案1】:

    您可以使用 Get-Item 获取所有打印机的列表并将其存储在变量 $printername 中

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

    这就是 $printername 中的内容

    PRN-printer1
    PRN-printer2
    PRN-printer3
    

    现在对于 $printername 中的每个 $printer,您可以执行下面的脚本以根据打印机复制文件

    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"
    
    }
    
    }
    

    【讨论】: