Как показать путь к удаленным компьютерам, отображенным на диске? - PullRequest
0 голосов
/ 15 января 2019

Я получил это, чтобы работать локально, однако в удаленной системе он не показывает путь, а только букву диска. Моя цель - показать путь к удаленному хосту.

Также иногда не отображаются все диски, подключенные к удаленному компьютеру, и я не знаю, почему.

Я пытался изменить Win32_LogicalDisk на MappedLogicalDisk, но это просто не дает никакой информации.

$DISK = Get-WmiObject -computer $compname Win32_LogicalDisk
foreach ($device in $DISK){
    Write-Host      "Drive: " $device.name
    Write-Host      "Path:  " $device.ProviderName
""
}
Pause
CheckHost

1 Ответ

0 голосов
/ 16 января 2019

Попробуйте один из следующих примеров:

Этот ...

$ComputerName = "ServerName"

gwmi win32_mappedlogicaldisk -ComputerName $ComputerName | 
    select SystemName, Name, ProviderName, SessionID | 
    foreach { 
    $disk = $_
    $user = gwmi Win32_LoggedOnUser -ComputerName $ComputerName | 
        where { ($_.Dependent.split("=")[-1] -replace '"') -eq $disk.SessionID} | 
        foreach {$_.Antecedent.split("=")[-1] -replace '"'}
    $disk | select Name, ProviderName, @{n = "MappedTo"; e = {$user} }
}

Или этот

function Get-MappedDrives($ComputerName)
{
$output = @()

if(Test-Connection -ComputerName $ComputerName -Count 1 -Quiet)
{
    $Hive = [long]$HIVE_HKU = 2147483651

    $sessions = Get-WmiObject -ComputerName $ComputerName -Class win32_process | 
    ?{$_.name -eq "explorer.exe"}

    if($sessions)
    {
    foreach($explorer in $sessions)
    {
        $sid = ($explorer.GetOwnerSid()).sid

        $owner  = $explorer.GetOwner()

        $RegProv = get-WmiObject -List -Namespace "root\default" -ComputerName $ComputerName | 
        Where-Object {$_.Name -eq "StdRegProv"}

        $DriveList = $RegProv.EnumKey($Hive, "$($sid)\Network")
        if($DriveList.sNames.count -gt 0)
        {
        foreach($drive in $DriveList.sNames)
        {
        $output += "$($drive)`t$(($RegProv.GetStringValue($Hive, "$($sid)\Network\$($drive)", 
        "RemotePath")).sValue)`t$($owner.Domain)`t$($owner.user)`t$($ComputerName)"
        }
        }
        else{write-debug "No mapped drives on $($ComputerName)"}
    }
    }
    else{write-debug "explorer.exe not running on $($ComputerName)"}
}
else{write-debug "Can't connect to $($ComputerName)"}
return $output
}

<#
#Enable if you want to see the write-debug messages
$DebugPreference = "Continue"

$list = "Server01", "Server02"
$report = $(foreach($ComputerName in $list){Get-MappedDrives $ComputerName}) | 
ConvertFrom-Csv -Delimiter `t -Header Drive, Path, Domain, User, Computer
#>
...