2017-11-21 6 views
1

ドメイン上のすべてのドライブの名前とパスを収集するスクリプトを作成しています。残念ながら、WMIアクセス許可のため、スクリプトを実行するとWMIアクセス拒否エラーが発生するため、ネットワーク経由でアクセス権を取得できません。だから代わりに、各コンピュータにローカルで実行するスクリプトを配備し、すべてのユーザーがアクセスできる共有場所に結果を書き込ませるようにしました。PowerShellスクリプトは手動でコマンドを入力すると正常に動作しますが、PDQをデプロイすると失敗します。

PowerShellに手動でコマンドを入力するとスクリプトが正常に動作しますが、PDQ Deployを使用して展開するときに結果ファイルが生成されますが0 KBです。 PDQ経由で実行しているときに何が失敗するのでしょうか?私はそれがローカル管理者またはドメイン管理者として同じ方法で失敗するとして実行する場合、私は自分自身としてそれを実行するときにのみローカルに動作することに気づいた。おそらく私はそれをローカルユーザーとして実行する必要がありますか?そうする方法はありますか?

$computername = hostname 
Get-WmiObject Win32_MappedLogicalDisk -ComputerName $computername | Out-File -Append \\servername\results\results.txt 
+0

マッピングされたドライブは、コンピュータごとではなく、ユーザーごとです。 –

答えて

1

コメントに記載されているように、マップされたドライブはユーザーごとです。値は、各ユーザーのレジストリに格納されます。ここでは、各ユーザーのHKCU:\NetworkHKCU:\Volatile Environment(ADホーム共有からマップされたドライブ)の情報をPSRemoting経由でプルする機能があります。 PDQ展開スクリプトが失敗した理由については

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

PowerShellスクリプトは、ファイル共有への許可なしにアカウントとして実行されていることです。 net use \\server\folder username passwordまたは(New-Object -ComObject WScript.Network).MapNetworkDrive('Z:','\\server\folder',$false, 'username', 'password')を使用して、異なる資格情報で共有をマップすることができます。

関連する問題