我正在创建一个脚本来收集域上所有映射驱动器的名称和路径。不幸的是,由于WMI权限,我不能简单地将它们拉过网络,因为我在运行脚本时遇到WMI访问被拒绝错误。所以我想我会将脚本部署到每台计算机上本地运行,并让他们将结果写入所有用户都可以访问的共享位置。
当我手动将命令输入PowerShell时,脚本工作正常,但是当我尝试通过PDQ Deploy部署它时,结果文件生成但是为0 KB。什么可能导致它通过PDQ运行失败?我也注意到它只在本地运行时我自己运行,如果我以本地管理员或域管理员的方式运行它以同样的方式运行。也许我需要让它作为本地用户运行?有没有办法这样做?
$computername = hostname
Get-WmiObject Win32_MappedLogicalDisk -ComputerName $computername | Out-File -Append \\servername\results\results.txt
答案 0 :(得分:1)
正如Bill Stewart在评论中提到的,映射驱动器是按用户划分的。值存储在每个用户的注册表中。这是一个通过PSRemoting从每个用户HKCU:\Network
和HKCU:\Volatile Environment
(从AD Home Share映射的驱动器)中提取信息的功能。
function Get-MappedDrive {
[CmdletBinding(SupportsShouldProcess = $True, ConfirmImpact = 'Low')]
param (
[Parameter(Mandatory = $True,
ValueFromPipelineByPropertyName = $True,
Position = 0)]
[string[]]$ComputerName
)
begin {}
process {
if ($pscmdlet.ShouldProcess($ComputerName)) {
Invoke-Command -ComputerName $ComputerName {
New-PSDrive -Name HKU -PSProvider Registry -Root HKEY_USERS | Out-Null
Get-ChildItem HKU:\ |
ForEach-Object {Get-ChildItem "$($_.pspath)\Network" -ErrorAction SilentlyContinue} |
ForEach-Object {
[PSCustomObject]@{
User = (New-Object System.Security.Principal.SecurityIdentifier ($_.name -replace 'HKEY_USERS\\(.*?)\\.*','$1')).Translate( [System.Security.Principal.NTAccount]).Value
Drive = "$((Split-Path $_.name -Leaf).ToUpper()):"
Path = Get-ItemProperty -Path $_.PSPath -Name RemotePath | Select-Object -ExpandProperty RemotePath
}
}
Get-ChildItem HKU:\ |
ForEach-Object {
if (Get-ItemProperty -Path "$($_.PSPath)\Volatile Environment" -name HOMEDRIVE -ErrorAction SilentlyContinue) {
[PSCustomObject]@{
User = (New-Object System.Security.Principal.SecurityIdentifier ($_.name -replace 'HKEY_USERS.(.*?)(\\.*|$)','$1')).Translate( [System.Security.Principal.NTAccount]).Value
Drive = Get-ItemProperty -Path "$($_.PSPath)\Volatile Environment" -name HOMEDRIVE | Select-Object -ExpandProperty HOMEDRIVE
Path = Get-ItemProperty -Path "$($_.PSPath)\Volatile Environment" -name HOMESHARE | Select-Object -ExpandProperty HOMESHARE
}
}
}
Remove-PSDrive HKU | Out-Null
}
}
}
end {}
}
PDQ Deploy Script失败的原因是PowerShell脚本作为帐户运行而没有文件共享权限。您可以使用net use \\server\folder username password
或(New-Object -ComObject WScript.Network).MapNetworkDrive('Z:','\\server\folder',$false, 'username', 'password')
使用不同的凭据映射共享。