如何使用 Powershell 获取打印服务器上的打印机共享?

如何使用 Powershell 获取打印服务器上的打印机共享?

我正在尝试使用 Powershell 从远程打印服务器获取打印共享。

我在用着:

Get-WmiObject Win32_Share -computerName "print-server"

我收到“访问被拒绝”错误:

Get-WmiObject : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
At line:1 char:14
+ Get-WmiObject <<<<  Win32_Share -computerName "print-server"
    + CategoryInfo          : NotSpecified: (:) [Get-WmiObject], UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

我不明白为什么我看不到共享,但是,好像我通过我的电脑(例如\\print-server\)连接,我可以看到所有的打印共享。

有任何想法吗?

谢谢。

答案1

是的,您可以在 Windows 资源管理器中看到它们,但使用 Powershell 命令时访问被拒绝,因为您正尝试在远程计算机上执行 WMI 查询,而您需要有效的凭据。

如果您想存储凭据以便可以非交互地运行该命令,您可以转换密码并将其作为安全字符串存储在文件中,但这只是混淆,任何智能窥探者都能够对其进行解码。

Read-Host -AsSecureString | ConvertFrom-SecureString | Out-File secret.txt

$pass = Get-Content secret.txt | ConvertTo-Securestring
$creds = New-Object -Typename System.Management.Automation.PSCredential -Argumentlist "domain\admin",$pass

也许可以尝试完全放弃 WMI 查询路由。也许可以尝试一个好的旧 COM 对象,如下所示:

$network = New-Object -Com WScript.Network
$network.AddWindowsPrinterConnection($printerShare)

答案2

尝试按Get-WmiObject如下方式传递凭据。

$Credential = Get-Credential

(您将收到输入凭证的提示)

Get-WmiObject Win32_Share -ComputerName 'PRINT-SERVER' -Credential $Credential

相关内容