#powershell
Вопрос:
Я хочу использовать букву диска вместо идентификатора тома, как показано ниже. Как я могу это сделать ?
Спасибо,
Мой вывод :
VolumeName OriginatingMachine InstallDate
\?Volume{3c0a6eed-1b4c-4e90-a25b-8af1af46e368} app01.contoso.com 4/13/2021 6:03:34 PM
\?Volume{de5c18ac-56e1-4efa-afb4-abaf476a99a9} app01.contoso.com 4/13/2021 6:03:34 PM
Мой желаемый результат :
VolumeName OriginatingMachine InstallDate
E: app01.contoso.com 4/13/2021 6:03:34 PM
X: app01.contoso.com 4/13/2021 6:03:34 PM
Команда:
Get-CimInstance Win32_ShadowCopy | Where InstallDate -lt ([datetime]::Now.AddDays(-5)) | Select-Object VolumeName,OriginatingMachine,InstallDate
Вывод Get-CimInstance Win32_ShadowCopy :
Caption :
Description :
InstallDate : 9/17/2021 9:22:06 PM
Name :
Status :
ClientAccessible : False
Count : 11
DeviceObject : \?GLOBALROOTDeviceHarddiskVolumeShadowCopy1234
Differential : True
ExposedLocally : False
ExposedName :
ExposedPath :
ExposedRemotely : False
HardwareAssisted : False
ID : {3C8DAB36-F083-4C68-84BA-E339B8A18AF3}
Imported : False
NoAutoRelease : True
NotSurfaced : False
NoWriters : False
OriginatingMachine : app01.contoso.com
Persistent : True
Plex : False
ProviderID : {B5946137-7B9F-4925-AF80-51ABD60B20D5}
ServiceMachine : app01.contoso.com
SetID : {D3D15CE2-9FFC-4A22-B03C-77D7FCB7D40E}
State : 12
Transportable : False
VolumeName : \?Volume{85e62cfa-2e9c-4a46-af5a-f0748acd60b6}
PSComputerName :
Комментарии:
1. Можете ли вы попробовать получить доступ
DeviceObject
?. То есть,Select-Object DeviceObject,OriginatingMachine,InstallDate
2. Я хочу использовать букву диска вместо идентификатора тома, как показано ниже. не объект устройства. Я загрузил образец вывода Get-CimInstance Win32_ShadowCopy :
3. Если вам это просто нужно для локальной машины, вы можете использовать
Get-Volume -UniqueID
значениеVolumeName
свойства из вывода Win32_ShadowCopy.
Ответ №1:
Win32_ShadowCopy
Команда возвращает Win32_ShadowCopy
объекты, которые имеют ряд полей, описанных здесь.
Некоторые из полей, представленных в ShadowCopy, совпадают с другими классами WMI, которые содержат информацию о буквах дисков, а именно с VolumeName
полем. Это поле также присутствует как в ShadowCopy
Win32_Volume
классе и, последний из которых обладает нужным нам свойством буквы диска!
Все, что нам нужно сделать, это просмотреть все теневые копии, затем просмотреть все тома на компьютере, а затем мы можем просмотреть копии, чтобы найти соответствующие тома. Если у вас действительно сложная логика монтажа, вам нужно будет добавить некоторую дополнительную логику, хотя бы в этом foreach
разделе.
Поэтому мы бы сделали небольшую быструю функцию для выполнения этого поиска для нас, которая выглядела бы так:
function Get-Win32ShadowVolumeDiskInfo{
$shadowCopies = Get-CimInstance Win32_ShadowCopy
$volumes = Get-CimInstance Win32_Volume
$returnObject = @()
foreach ($copy in $shadowCopies){
$matchingVolume = $volumes | Where DeviceID -eq $copy.VolumeName
$returnObject = [PSCustomObject]@{
VolumeName=$matchingVolume.Name;
OriginatingMachine = $copy.OriginatingMachine;
InstallDate = $copy.InstallDate}
}
$returnObject
}
Комментарии:
1. спасибо, кстати, как мы можем добавить «Где установить дату-lt ([дата-время]::Сейчас. Добавочные дни(-5)) » ?
2. Ты бы руководил этим:
Get-Win32ShadowVolumeDiskInfo | Where InstallDate -lt ([datetime]::Now.AddDays(-5))
3. Я бы предпочел
([datetime]::Now.AddDays(-5).Date)
установить эту контрольную дату на полночь. Кроме того, пожалуйста , не делайте$returnObject = [PSCustomObject]@{..}
этого, вместо этого просто попросите цикл просто вывести [PSCustomObject]. Кроме этого, 14. Здесь я тоже должен согласиться с @Тео. 1 также!
5. Хорошие предложения! Спасибо!