У меня есть сценарий, который получает диски на хосте и выводит их в текстовый файл. текстовый файл будет что-то вроде ниже -PowerShell - тестовый путь
D:
E:
F:
G:
Мне нужно проверить каждый диск на пути, и если верно присвоить его переменной.
У меня есть следующее до сих пор, но оно не работает. Я знаю, что это супер очевидно, любая помощь очень ценится.
Get-WmiObject win32_logicaldisk -Filter "DriveType=3 AND DeviceID!='C:'" | Select DeviceID | Format-Table -HideTableHeaders > c:\DeviceID.txt -Force
$DeviceID = Get-Content C:\DeviceID.txt
$DeviceID | ForEach {$_.TrimEnd()} | ? {$_.trim() -ne '' } > c:\DeviceID.txt
$DeviceID = Get-Content C:\DeviceID.txt
$Path = "$DeviceID\Apps\NetprobeNT\"
$PathExists = Test-Path $Path
ForEach-Object ($DeviceID in $DeviceID)
{
If ($PathExists -eq $True)
{
$DeviceDrive = $DeviceID}
Else
{
$DeviceDrive = "C:"}
}
Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Спасибо за помощь ниже, это работает.
я наткнулся другой метод, который работает
$Folder = "Apps\NetprobeNT"
Get-PSDrive | Where-Object {
$_.root -match "[C-Z]:\\" -and (Test-Path $(Join-Path $_.root $Folder))
}
Что является лучшим способом использовать?
Лучший метод является один, который является наиболее поддерживаемую вами и вашей команды. Ваше первое решение зависит от WMI и будет работать удаленно, если вы разрешите доступ к вашим машинам и WMI. – Djarid
Решение 'Get-PSDrive' не ведет себя так же, как WMI-решение. Вы фильтруете 'DriveType = 3' (логический диск) в wmi-версии. Это исключит карты памяти, USB-диски, сетевые диски и т. Д., И вы получите только физически установленные диски. «Get-PSDrive» будет включать все типы (которые вы также можете сделать, удалив фильтр 'DriveType = 3' в wmi-версии). –
Спасибо за оба входа. Я буду придерживаться решения Frode F., поскольку у меня есть множество хостов OS, которые нужно будет запускать и менее интенсивно для памяти. –