2017-11-21 5 views
1

도메인에서 매핑 된 모든 드라이브의 이름과 경로를 수집하는 스크립트를 만들고 있습니다. 불행히도 WMI 권한으로 인해 스크립트를 실행할 때 WMI 액세스 거부 오류가 발생하여 네트워크를 통해 권한을 가져올 수 없습니다. 그래서 나는 대신 각 컴퓨터에 로컬로 실행되도록 스크립트를 배포하고 모든 사용자가 액세스 할 수있는 공유 위치에 결과를 기록하도록했습니다.수동으로 명령을 입력하면 Powershell 스크립트가 제대로 실행되지만 PDQ 배포로 배포 할 때 오류가 발생합니다.

PowerShell에 수동으로 명령을 입력 할 때 스크립트가 제대로 작동하지만 PDQ 배포를 통해 배포하려고하면 결과 파일이 생성되지만 0KB입니다. PDQ를 통해 실행할 때 실패 할 수있는 원인은 무엇입니까? 또한 로컬 관리자 나 도메인 관리자로 동일한 방식으로 실행하면 로컬로만 작동한다는 것을 알았습니다. 아마도 로컬 사용자로 실행해야합니까? 그렇게 할 방법이 있습니까?

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

매핑 된 드라이브는 컴퓨터가 아닌 사용자 별입니다. –

답변

1

Bill Stewart가 언급 한 것처럼 매핑 된 드라이브는 사용자별로 있습니다. 값은 각 사용자의 레지스트리에 저장됩니다. 다음은 PSRemoting을 통해 각 사용자의 HKCU:\NetworkHKCU:\Volatile Environment (AD 홈 공유에서 매핑 된 드라이브)의 정보를 가져 오는 기능입니다. 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')을 사용하여 다른 자격 증명으로 공유를 매핑 할 수 있습니다.