gpt4 book ai didi

powershell - Foreach 盘符数组

转载 作者:行者123 更新时间:2023-12-01 14:36:21 25 4
gpt4 key购买 nike

我正在编写一个脚本来检查逻辑驱动器是 USB 还是 iSCSI 目标。如果它是忽略关联的驱动器号。

Get-WmiObject win32_logicaldisk -Filter "DriveType='3'" |
where-object{$_.DeviceID -ne $usbletters -and $_.DeviceID -ne $iSCSIletters} | %
{$_.Name} | out-file $kreports\avail.txt

我的问题是,当检测到多个相同类型的驱动器时,它们会被不等于选项简单地忽略。我假设我需要执行某种形式的 foreach 循环?

如果有人能给我指出正确的方向,那就太好了!

这是完整的脚本。

#Variables and Arguments
$kreports = "C:\Kworking\reports"


# Create kworking Reports folder
if (!(Test-Path -path $kreports))
{New-Item $kreports -type directory}


# USB Drive check
$diskdrive = gwmi win32_diskdrive | ?{$_.interfacetype -eq "USB"}
$usbletters = $diskdrive | %{gwmi -Query "ASSOCIATORS OF
{Win32_DiskDrive.DeviceID=`"$($_.DeviceID.replace('\','\\'))`"} WHERE

AssocClass = Win32_DiskDriveToDiskPartition"} | %{gwmi -Query "ASSOCIATORS

OF {Win32_DiskPartition.DeviceID=`"$($_.DeviceID)`"} WHERE AssocClass =

Win32_LogicalDiskToPartition"} | %{$_.DeviceID}

# iSCSI Drive check
$iSCSIdrive = gwmi win32_diskdrive | ?{$_.model -match "iSCSI"}
$iSCSIletters = $iSCSIdrive | %{gwmi -Query "ASSOCIATORS OF
{Win32_DiskDrive.DeviceID=`"$($_.DeviceID.replace('\','\\'))`"} WHERE

AssocClass = Win32_DiskDriveToDiskPartition"} | %{gwmi -Query "ASSOCIATORS

OF {Win32_DiskPartition.DeviceID=`"$($_.DeviceID)`"} WHERE AssocClass =

Win32_LogicalDiskToPartition"} | %{$_.DeviceID}


# Disk Information
Get-WmiObject win32_logicaldisk -Filter "DriveType='3'" | where-object{$_.DeviceID -ne
$usbletters -and $_.DeviceID -ne $iSCSIletters} | %{$_.Name} | out-file
$kreports\avail.txt


# Fix Output Line Spacing
$InputFile = "$kreports\avail.txt"
$OutputFile = "$kreports\availdisks.txt"

$Writer = New-Object IO.StreamWriter "$OutputFile"
$Writer.Write( [String]::Join("`r`n", $(Get-Content $InputFile)) )
$Writer.Close()

最佳答案

问题是 Win32_LogicalDisk的成员(member)DeviceID包含驱动器号和冒号。因为值(value)是,比如说,C:然后你测试 C 是否相等, where-object没有找到任何东西。

要么在驱动器盘符上包含冒号,要么以 Powershell 方式使用正则表达式。

$disks = gwmi win32_logicaldisk -Filter "DriveType='3'"
# Select all devices that do not have deviceids a,b,c,k or l, followed by colon
$avail = $disks | ? { $_.DeviceID -notmatch "[abckl]:"}
# Do something with filtered results

关于powershell - Foreach 盘符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13485666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com