我需要在输出文件中列出已连接驱动器的用户及其序列号。我将一次在阵列中的12-24个驱动器之间进行连接。我希望能够将分配的驱动器号放入变量中。然后为每个连接的驱动器提供整个脚本循环。转储串行+将其链接到CSV输出文件中的该驱动器的用户
如何将分配的驱动器号放入数组中?
$(get-physicaldisk; get-childitem -path (array variable):\Users) | add-content C:\path\to\my\output.csv
当我在单个驱动器上尝试时,几乎可以得到我需要的输出。但是我真的很想清理它,只显示重要信息(PSChildName
),但不包括所有默认的公共管理员帐户,以减少不必要的重复信息。
我想让它工作
$(get-physicaldisk | select-object FriendlyName, SerialNumber)-$(get-childitem -path L:\Users| select-object PSChildName)
但没有
我需要它来获取每个驱动器的序列号,并输出与该驱动器关联的用户……我在努力使输出看起来像我想要的那样。
对于每个-阵列中的驱动器-修改我的.csv的输出((序列号)+(驱动器上的用户))
经过多次插拔,我现在在这里,感谢大家的帮助
function Get-UsersOnDrive([string[]]$DriveLetters){
if (!$DriveLetters){
$DriveLetters = Get-WmiObject Win32_Logicaldisk | %{$_.Name -replace ":", ""}
}
foreach($DriveLetter in $DriveLetters)
{
$SerialNumber = get-partition -DriveLetter $DriveLetter -ErrorAction Ignore | get-disk | select -ExpandProperty SerialNumber
$path = $DriveLetter + ":\Users"
$Users = get-childitem -path $path | select-object PSChildName
$Users | %{
$OutPut = new-object PsCustomObject
$OutPut | Add-Member -MemberType NoteProperty -Name SerialNumber -Value $SerialNumber -PassThru |
Add-Member -MemberType NoteProperty -Name Username -Value $_
return $OutPut
}
}
}
Get-UsersOnDrive -DriveLetters @("C") | Export-Csv -Path C:\sample\Test.csv -NoTypeInformation
答案 0 :(得分:0)
好的,这就是我想出的内容及其粗略之处
Get-WmiObject Win32_Logicaldisk | %{
$DriveLetter = $_.Name -replace ":", ""
$SerialNumber = get-partition -DriveLetter $DriveLetter | get-disk | select -ExpandProperty SerialNumber
$Users = Get-WmiObject Win32_UserProfile | select -ExpandProperty LocalPath | ?{$_ -like "$DriveLetter*"} | %{
$_ -replace '.*\\'
}
$Users | %{
$OutPut = new-object PsCustomObject
$OutPut | Add-Member -MemberType NoteProperty -Name SerialNumber -Value $SerialNumber -PassThru |
Add-Member -MemberType NoteProperty -Name Username -Value $_
return $OutPut
}
} | Export-Csv -Path C:\sample\Test.csv -NoTypeInformation
A。获取WMI LogicalDisk(获取驱动器号)
B。将 $ DriveLetter 传递到get-partition中,并获得 SerialNumber 属性值。
C。获取用户配置文件路径,然后找到当前驱动器上的路径,并替换除最后一个斜杠(即用户名)以外的所有内容
D。对于驱动器上的每个用户,我们创建一个自定义对象,并添加属性SerialNumber和Username,然后返回输出并导出为CSV
这是一个您可以调用的功能,也可以使用户进入驱动器
function Get-UsersOnDrive([string[]]$DriveLetters){
if (!$DriveLetters){
$DriveLetters = Get-WmiObject Win32_Logicaldisk | %{$_.Name -replace ":", ""}
}
foreach($DriveLetter in $DriveLetters){
$SerialNumber = get-partition -DriveLetter $DriveLetter -ErrorAction Ignore | get-disk | select -ExpandProperty SerialNumber
$Users = Get-WmiObject Win32_UserProfile | select -ExpandProperty LocalPath | ?{$_ -like "$DriveLetter*"} | %{
$_ -replace '.*\\'
}
$Users | %{
$OutPut = new-object PsCustomObject
$OutPut | Add-Member -MemberType NoteProperty -Name SerialNumber -Value $SerialNumber -PassThru |
Add-Member -MemberType NoteProperty -Name Username -Value $_
return $OutPut
}
}
}
Get-UsersOnDrive -DriveLetters @("C","V","F") | Export-Csv -Path C:\sample\Test.csv -NoTypeInformation
如果删除-DriveLetters参数和驱动器,则它将检查所有驱动器
答案 1 :(得分:0)
以下代码获取磁盘序列号。我不确定为什么需要这样做。这会给您一个开始吗?
function Get-DiskSerialNumber {
param(
[Parameter(Mandatory = $true,Position=0)]
[string] $DriveLetter
)
Get-CimInstance -ClassName Win32_DiskDrive |
Get-CimAssociatedInstance -Association Win32_DiskDriveToDiskPartition |
Get-CimAssociatedInstance -Association Win32_LogicalDiskToPartition |
Where-Object DeviceId -eq $DriveLetter |
Get-CimAssociatedInstance -Association Win32_LogicalDiskToPartition |
Get-CimAssociatedInstance -Association Win32_DiskDriveToDiskPartition |
Select-Object -Property SerialNumber
}
& openfiles /query /fo csv |
Select-Object -Skip 5 |
ConvertFrom-Csv -Header @('ID','USER','TYPE','PATH') |
Select-Object -Property USER,@{name='DRIVE';expression={$_.PATH.Substring(0,2)}} |
Sort-Object -Property DRIVE,USER -Unique |
Select-Object -Property *,
@{name='SERIALNUMBER';expression={(Get-DiskSerialNumber -Drive $_.DRIVE).SerialNumber}}