2015-12-13 4 views
1

Я пытаюсь написать программу, которая проходит через все мои удаленные компьютеры и определяет, хорошо ли они отображены. Если это не так, они будут отображать их, и если это не удастся, он распечатает мне журнал имен хостов компьютеров.Powershell: создание программы, которая проверяет сетевые диски на удаленных компьютерах

По какой-то причине я застрял на создании функции:

function checkMapped { 
    $drive = Get-PSDrive m -PSProvider FileSystem 
    $NetDrive= $drive.DisplayRoot 
    $localhost = $env.Computername 

    if ($NetDrive -eq "\\xxxx\xxx") { 
     "Mapped" 
    } 
} 

Invoke-Command -ComputerName localhost -ScriptBlock { checkMapped } -Credential creds 

Может кто-нибудь помочь? Большое спасибо, Себастьян.

ответ

0
Invoke-Command -ComputerName localhost -ScriptBlock ${function:checkMapped} 

Но я думаю, что это не будет работать, так как вы открываете свой собственный сеанс, чтобы сделать это, без дисков, отображенных (только проверенных на моей системе).

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

Попробуйте вместо этого:

function Check-MappedDrive ($computerName) { 
    $driveLetter = "M:" 
    $path = "\\xxx\xxxx" 

    Get-WmiObject -Class Win32_MappedLogicalDisk -ComputerName $computerName | 
     Where-Object { $_.Name -eq $driveLetter } | 
     ForEach-Object { 
      if($_.ProviderName -eq $path) { 
       "$driveLetter is mapped to $path on $computerName" 
      } 
     } 
} 

foreach($computerName in "localhost", "127.0.0.1") { 
    Check-MappedDrive $computerName 
} 

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

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

+0

Эй, спасибо за быстрый ответ, мне нужно дистанционно проверить сценарий на нескольких машинах, этот скрипт направлен только на мою машину? –

0

это может сработать для вас, оно дает имя и путь.

foreach($CompName in $Complist) 
    { 
    get-wmiobject win32_mappedlogicaldisk -computername %CompName | select name,providername 
    } 
Смежные вопросы