Показать полную графическую версию : определение GUID загрузочного диска
mcintosh55
26-05-2016, 17:31
привет всем!!! Есть вот такой кусок кода
(gwmi win32_volume -Filter "SystemVolume='true'").Caption
он определяет GUID загрузочного диска, но не на всех компьютера определятся (раздел точно есть!!!) в сети поэтому делает бэкап только системного диска может есть еще какой вариант определения.
но не на всех компьютера определятся »
Проверьте, эти «не все компьютеры» случайно не XP? Также, судя по упоминаниям, под Windows Server 2003 отсутствует свойство «SystemVolume».
может есть еще какой вариант определения. »
«mountvol.exe», например.
Ubiquiti
26-05-2016, 19:03
не только на 7ке и 8,1 тестил и на некоторых ни чего не выводит (xp уже года три не используем)
SystemVolume != BootVolume
https://support.microsoft.com/en-us/kb/314470
System volume
The system volume refers to the disk volume that contains the hardware-specific files that are needed to start Windows, such as Ntldr, Boot.ini, and Ntdetect.com.
Boot volume
The boot volume refers to the disk volume that contains the Windows operating system files and the supporting files. By default, the Windows operating system files are in the WINDOWS folder, and the supporting files are in the WINDOWS\System32 folder.
mcintosh55
26-05-2016, 19:29
«mountvol.exe», например. »
Это утилиту Я знаю но как Я определю загрузочный раздел если он буквы не имеет GUID диска C: без проблем определяет
greg zakharov
26-05-2016, 19:56
Я определю загрузочный раздел если он буквы не имеет GUID диска C: без проблем определяетЭто равносильно "кто к нам с чем зачем, тот того и от того": Вы не могли бы выражать суть яснее? Что же до продолжения темы... В сторону diskpart смотрели? Ну, а если diskpart не устраивает, то можно и могучим шелом:
$$ = -join ($d = Get-ItemProperty HKLM:\SYSTEM\MountedDevices).(
$bd = "\DosDevices\$(
[Environment]::SystemDirectory.Substring(0, 2)
)"
)
$guid = ($d.PSObject.Properties | Where-Object {
(-join $_.Value) -eq $$ -and $_.Name -ne $bd
}).Name
$guid.Substring(($$ = $guid.IndexOf('{')), $guid.Length - $$)
Foreigner
26-05-2016, 20:03
Батник:
@echo off
for /f "tokens=2 delims={}" %%i in (' "wmic volume where bootvolume="TRUE" get deviceid" ') do echo %%i
Powershell
(gwmi win32_volume | where { $_.bootvolume } | select -expand deviceid) -replace '.*{(.+)}.*','$1'
mcintosh55
26-05-2016, 20:14
Народ всем спасибо за помощь, ответа Я не получил у меня уже есть код
(gwmi win32_volume -Filter "SystemVolume='true'").Caption
на powershell который на в начале темы. А суть вопроса в том что код на некоторых компьютерах пустое значение выдает (ОС W7 используется )
chcp 1251
<# BSD 1.2
скрипт для создания образа системы средствами windows утилита wbadmin.exe
Дата создания: 01.10.2015
Дата изменения: 10.04.22016
#>
#Куда сохраняем
$OutBackup = 'E:'
#системный диск
$Windows = $env:SystemDrive
#статуc службы теневое копирование тома и служба резервного копирования
$status_vss = Get-Service vss | select status
$status_wbengine = Get-Service wbengine | select status
#проверяем запущены службы
if ($status_vss.Status -eq "Stopped")
{
Start-Service vss #если не запущена запускаем
}
if ($status_wbengine.Status -eq "Stopped")
{
Start-Service wbengine #если не запущена запускаем
}
#Делает проверку есть ли загрузочный файл на диске с Windows
$TP = Test-Path $env:SystemDrive\BOOTSECT.BAK
#если нету на системном диске загрузочных файлов то узнает id загрузочного диска
If ($TP -eq $False)
{
$BD = (gwmi win32_volume -Filter "SystemVolume='true'").Caption
# под windows 10 не понимает wbadmin start backup -backupTarget:$($OutBackup) -include:$($BD), $($Windows) -vssFull -quiet
# верхняя строка w7 и w8 все ок
wbadmin start backup -backupTarget:$($OutBackup) -include:$($BD) -vssFull -quiet
wbadmin start backup -backupTarget:$($OutBackup) -include:$($Windows) -vssFull -quiet
}
else
{
wbadmin start backup -backupTarget:$($OutBackup) -include:$($Windows) -vssFull -quiet
}
#удаляем резервные копия
WBADMIN DELETE BACKUP -keepVersions:3 -quiet
Foreigner
26-05-2016, 20:21
ответа Я не получил »
Вам вариантов дали, только пользуйся.
mcintosh55
26-05-2016, 20:22
не работает пустое поле выдает ((((
greg zakharov
26-05-2016, 20:27
не работает пустое поле выдаетТо, что Вы не в ладах с русским (особенно по части пунктуации), ясно, но чтобы в здравом уме заявлять, дескать, ни одно из предложенных выше решений не работает, как-то однако.
mcintosh55, никто не знает, что у Вас там — в «.Caption» ли у Вас не GUID (обратите, кстати, внимание на приведённый выше код коллеги Foreigner: правильно — использовать свойство «.DeviceID», а вовсе не «.Caption»), отсутствует свойство «.SystemVolume» и посему возвращается пустое множество, возвращается коллекция из нескольких экземпляров объектов «Win32_Volume» вместо одного…
Если сами не хотите/не можете разобраться, начните с того, что как минимум соберите по всем проблемным машинам статистику:
gwmi win32_volume -Property DriveLetter, Caption, DeviceID, SystemVolume, BootVolume
и выложите сюда. И разберитесь таки, что будет правильным — System volume или Boot volume. А также с русским языком.
Ubiquiti
27-05-2016, 11:16
написал скрипт которые сканирует сеть, собрал статистику есть пару 5 машин у которых deviceid пустой. Вскрытия показала, что жесткие диски подключены к интерфейсу sata3, а тот в свою очередь работает на левом контроллере. Путем просмотра манула по матери выяснил какие порты sata не относятся к этому контроллеру, переключил на них hdd. Скрипт начал правильно определять guid системного раздела.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.