Войти

Показать полную графическую версию : [решено] Продолжить выполнение, если значение True


IVa_
11-03-2015, 00:01
для сравнения переменных используется оператор -math если значение переменной верное тогда продолжить выполнение скрипта.
$a=12
"$a" -math "1."
true
Продолжить выполнение..
Если Переменная $a false не соответствует 12 использовать оператор -replase
Вопрос каким образом поместить в переменную $a с помощью -replase "том: (буква диска)" отформатированного диска.
Get-WMIObject -class win32_diskdrive -filter "Caption="000000000 ata device"" | format-list *
Использовать оператор $Matches.
Или Get-psDrive -Match "А вот как указать размер диска в 80Gb из списка выводимых объектов и извлечь букву присвоенную после форматирования, после чего передать значение оператору -replase для помещения в переменную $a "
в этом случае скрипт будет работать, а значение false исправлено.

IVa_
11-03-2015, 00:46
get-psdrive | where-object {$_.used -match "^[(70-80)]"} а вот как получить свойство $_name в $maches ?

Foreigner
11-03-2015, 00:49
IVa_, Что-то как-то туманно..

gwmi win32_logicaldisk | where { $_.drivetype -eq 3 } |
foreach {

"$($_.deviceid) {0:f} Gb" -f ($_.size / 1Gb)

}

IVa_
11-03-2015, 01:41
нужно проверить имя объекта в переменной после форматирования диска,если имя объекта, а в моем случае жесткого совпадает с значением в переменной, то идет продолжение выполнения сценария.Если после проверки значение False, тогда извлекаю командой имя объекта, и помещаю его в переменную которая не соответствует, с помощью оператора -raplase
format /q
$a = "C:\"
"$a" -match "C"
false
В случае если значение после проверки false, выполняется команда
gwmi win32_logicaldisk | where { $_.drivetype -eq 3 } |
foreach {

"$($_.deviceid) {0:f} Gb" -f ($_.size / 1Gb -match "^(80015491072)")

}

$Matches
-raplase может изменить данные внутри переменной?
Проблема в том что я не могу сообразить как мне в переменную $a вставить данные из $matches, что-бы значение было True

Molchune
11-03-2015, 08:49
Вот так вот чтоли?

$a = "C:\"
if (("$a" -match "C") -eq $true) { Write-Host OK
} else {
gwmi win32_logicaldisk | where { $_.drivetype -eq 3 } |
foreach {
"$($_.deviceid) {0:f} Gb" -f ($_.size / 1Gb -match "^(80015491072)")
}
$Matches
}

IVa_
11-03-2015, 10:08
нужно проверить переменную $a на правильность буквы локального диска после форматирования, если буква в процессе форматирования изменилась тогда внести в переменную $a значение присвоенной буквы после форматирования.То есть, до форматирования была C после стала q тогда будет false при этом значении нужно извлечь букву из команды и внести изменения в переменную $a.Вот так вот чтоли? »
$a="C:\"
"$a" -match "C" проверить может и это выражение? правильно.
А в случае значения false в переменную $a внести изменения из команды
gwmi win32_logicaldisk | where { $_.drivetype -eq 3 } |
foreach {

"$($_.deviceid) {0:f} Gb" -f ($_.size / 1Gb -match "^(80015491072)")

}
вчера смотрел веб-каст про -replase оператора замены и $matches.И подумал почему бы не воспользоваться этими операторами.Но проблема в том что после получения нужного раздела локального диска ($_.size / 1Gb -match "^(80015491072)") не удается извлечь свойство $_.name в $maches , то есть вместо OK нужен параметр ($_.name)

Foreigner
11-03-2015, 10:42
IVa_, Объясните, что вы хотите получить. Если я правильно догадываюсь, то через размер узнать название:

gwmi win32_logicaldisk | where { $_.size -eq 1234567890 } | foreach { $_.name }
gwmi win32_logicaldisk -filter "size = 1234567890" | foreach { $_.name }
gwmi -query "select * from win32_logicaldisk where size = '1234567890'" | select -expand name

IVa_
11-03-2015, 10:49
Получить хочу букву диска (оно же имя объекта).Да через размер, другого способа я не нахожу.После получения этой буквы ее сохранить в переменную $a.

Foreigner
11-03-2015, 10:58
IVa_,

# только свойство 'name'

gwmi win32_logicaldisk | where { $_.size -eq 1234567890 } | foreach { $a = $_.name }
$a

Или сразу весь объект:

# все свойства и методы, посмотреть можно командой '$a | get-member'

$a = gwmi win32_logicaldisk | where { $_.size -eq 1234567890 }
$a.name

IVa_
11-03-2015, 11:10
Я подумал следующее аз зачем все это?Если можно поступить следующим образом из команды gwmi win32_logicaldisk | where { $_.size -eq 1234567890 } | foreach { $_.name }
gwmi win32_logicaldisk -filter "size = 1234567890" | foreach { $_.name }
gwmi -query "select * from win32_logicaldisk where size = '1234567890'" | select -expand name занести в $a букву диска.

IVa_
11-03-2015, 13:21
$a = gwmi win32_logicaldisk | where { $_.size -eq 80015491072 } | foreach { $_.name }
gwmi win32_logicaldisk -filter "size = 80015491072" | foreach { $_.name }
gwmi -query "select * from win32_logicaldisk where size = '80015491072'" | select -expand name
Out-String -InputObject $a -Width 5
$a -match "[a-z]"
$a
Если я правильно понимаю Out-String записывает значения в $a ?
Если да, то тогда это избавит меня от сомнений, неправильной буквы в переменной после форматирования диска.
И это здорова.Я могу быть уверен что ошибок не допущу.

Foreigner
11-03-2015, 13:38
IVa_, Зачем вам аутстринг? Я чуть ранее привел пример (http://forum.oszone.net/post-2481244-9.html), как назначить переменную $a

IVa_
11-03-2015, 15:47
Вижу свой результат, не обратил внимание.Благодарен за направление . . .




© OSzone.net 2001-2012