【发布时间】:2021-05-24 16:19:19
【问题描述】:
我正在编写一个脚本来使用 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。仅供参考,我真的不了解 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
这很糟糕。
有人可以帮我指出正确的方向吗?
【问题讨论】:
-
您不应该在
Invoke-Command中进行计算机调用,因此不要为Set-Printercmdlet 设置ComputerName参数,因为您已经使用Invoke-Command在这台计算机上。不要忘记双跳限制。 -
你为什么同时使用
ComputerName和CimSession参数(你不使用Set-Printer命令)。CimSession只能在不使用Invoke-Command的情况下工作。