远程设置打印机选项

问题描述

我正在编写一个脚本来使用 PowerShell 设置不同的打印机设置(共享、发布、双工等...)。在我的环境中,我的服务器访问帐户与我的工作站不同。所以我试图将这些提升的权限传递给服务器以创建打印机并选择所有不同的选项,以及设置权限。

使用凭证管理器,并在调用中创建一个新的 Cimsession 来创建打印机,它可以在我的工作站上正常工作。但是在设置打印机选项时,它不会将服务器或打印机名称传递给调用

因此,以下是创建新打印机端口和打印机的调用

Add-PrinterPort -Name $IP -ComputerName $Server -PrinterHostAddress $IP -Cimsession $Remote -ErrorAction SilentlyContinue
Add-Printer -ComputerName $Server -Name $Printer -PortName $IP -Driver $Driver -Location $Loc -Comment $Comment -Cimsession $Remote

一切都按预期进行。这是我用来设置选项的内容(因为访问被拒绝而失败):

Set-Printer -ComputerName "$Server" "$Printer" -Shared:$true -ShareName "$Printer" -Published:$true -PermissionSDDL 'G:SYD:(A;;SWRC;;;AC)(A;OIIO;RPWPSDRCWDWO;;;AC)(A;;SWRC;;;S-1-15-3-1024-155201139-2658482041-3127973164-329287231-3865880861-1938685643-461067658-1087000218)(A;OIIO;RPWPSDRCWDWO;;;S-1-15-3-1024-150205139-2658482041-3872973164-329287231-3865880861-1938685643-461067658-1087000218)(A;;LCSWSDRCWDWO;;;S-1-5-21-1275210071-1425521274-6549912557-618529)(A;OIIO;RPWPSDRCWDWO;;;S-1-5-21-1276648271-1425521274-6549912557-618529)(A;;LCSWSDRCWDWO;;;S-1-5-21-1275210071-1422146274-6549912557-485967)(A;OIIO;RPWPSDRCWDWO;;;S-1-5-21-1194558071-1425521274-6549912557-485967)(A;OIIO;GA;;;CO)(A;;SWRC;;;WD)(A;CIIO;GX;;;WD)(A;;LCSWSDRCWDWO;;;BA)(A;OICIIO;GA;;;BA)'

由于没有办法在 Set-Printer 命令中指定凭据,我开始使用 Invoke-Command。仅供参考,我真的不明白调用命令的细节,这可能是我的问题。如:

$Para = @{
    ComputerName = $Server
    ScriptBlock = {
        Set-Printer -ComputerName $Args[1] $Args[0] $Args[2] $Args[3] $Args[4] -PermissionSDDL 'G:SYD:(A;;SWRC;;;AC)(A;OIIO;RPWPSDRCWDWO;;;AC)(A;;SWRC;;;S-1-15-3-1024-4044835139-2658482041-3127973164-329287231-3865880861-1938685643-461067658-1087000422)(A;OIIO;RPWPSDRCWDWO;;;S-1-15-3-1024-4044835139-2658482041-3127973164-329287231-3865880861-1938685643-461067658-1087000422)(A;;LCSWSDRCWDWO;;;S-1-5-21-1275210071-1425521274-1177238915-348522)(A;OIIO;RPWPSDRCWDWO;;;S-1-5-21-1275210071-1425521274-1177238915-348522)(A;;LCSWSDRCWDWO;;;S-1-5-21-1275210071-1425521274-1177238915-285055)(A;OIIO;RPWPSDRCWDWO;;;S-1-5-21-1275210071-1425521274-1177238915-285055)(A;OIIO;GA;;;CO)(A;;SWRC;;;WD)(A;CIIO;GX;;;WD)(A;;LCSWSDRCWDWO;;;BA)(A;OICIIO;GA;;;BA)'
        }#End ScriptBlock
    ArgumentList = "$Printer","$Server","-Shared:$true","-ShareName $Printer","-Published:$true"
}
Invoke-Command @Para

这很失败。

有人能帮我指出正确的方向吗?

解决方法

我认为您的问题在于您如何设置远程呼叫。这些仍然是 cmdlet,您传递参数的方式没有任何意义。我认为这就是你想要完成的:

$icParms = @{
    ComputerName = $Server
    ScriptBlock  = {
        $spParms = @{
            Name           = $using:Printer
            ComputerName   = $using:Server
            Shared         = $true
            ShareName      = $using:Printer
            Published      = $true
            PermissionSDDL = 'G:SYD:(A;;SWRC;;;AC)(A;OIIO;RPWPSDRCWDWO;;;AC)(A;;SWRC;;;S-1-15-3-1024-4044835139-2658482041-3127973164-329287231-3865880861-1938685643-461067658-1087000422)(A;OIIO;RPWPSDRCWDWO;;;S-1-15-3-1024-4044835139-2658482041-3127973164-329287231-3865880861-1938685643-461067658-1087000422)(A;;LCSWSDRCWDWO;;;S-1-5-21-1275210071-1425521274-1177238915-348522)(A;OIIO;RPWPSDRCWDWO;;;S-1-5-21-1275210071-1425521274-1177238915-348522)(A;;LCSWSDRCWDWO;;;S-1-5-21-1275210071-1425521274-1177238915-285055)(A;OIIO;RPWPSDRCWDWO;;;S-1-5-21-1275210071-1425521274-1177238915-285055)(A;OIIO;GA;;;CO)(A;;SWRC;;;WD)(A;CIIO;GX;;;WD)(A;;LCSWSDRCWDWO;;;BA)(A;OICIIO;GA;;;BA)'
        }
        Set-Printer @spParms
    }
}
Invoke-Command @icParms

请参阅 about_Remote_Variables 主题。