Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » PowerShell

Модерирует : KLASS, IFkO

KLASS (06-03-2018 00:43): Объединение тем по сценариям: Сценарии Windows
 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

chand1er

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
[more] [more] при выполнении $cli= C:\Raid\rstcli64.exe -I -d 0-0-0-0 > C:\Raid\pdisk0.txt
PS ругается на

Код:
 
rstcli64.exe :  
строка:1 знак:27
+ $cli= C:\Raid\rstcli64.exe <<<<  -I -d 0-0-0-0 > C:\Raid\pdisk0.txt
    + CategoryInfo          : NotSpecified: (:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
0
 
 

 
Пробовал по разному экранировать кавычками - результата пока не добился
 
при выполнении моего скрипта
 

Код:
 
$cli= C:\Raid\rstcli64.exe -I -d 0-0-0-0 > C:\Raid\pdisk0.txt
$a = get-content C:\Raid\pdisk0.txt | select-string "State"
    if ($a -match "State:             Normal") {
    $b = "1"
    }
    if ($a -notmatch "State:             Normal") {
   $b = "Down"
    }
write-host $b
 
 
Результат:
 
 
PS C:\Windows\system32> C:\RAID\pdisk0.ps1
rstcli64.exe :  
C:\RAID\pdisk0.ps1:1 знак:27
+ $cli= C:\Raid\rstcli64.exe <<<<  -I -d 0-0-0-0 > C:\Raid\pdisk0.txt
    + CategoryInfo          : NotSpecified: (:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
0
 
1
 

 
То есть единицу он возвращает как состояние, но при этом еще приписывает 0, насколько я понял - из-за неправильного оформления + $cli= C:\Raid\rstcli64.exe <<<<  -I -d 0-0-0-0
 
Если выполнить ваш скрипт и подставить вместо фиксированного текста ссылку на C:\Raid\rstcli64.exe,  

Код:
 
$str = C:\Raid\rstcli64.exe -I -d 0-0-0-0 > C:\Raid\pdisk0.txt
 
$hshIniContents = @{}  
$str -split "\n" | %{  
switch -regex ($_) {  
"ID:[^\d]*((\d*-?){4}).*" {$strID = $Matches[1]; if ($strID) {$hshIniContents[$strID] = @{}};break}  
"(.*):\s*([^\r\n]*)" {$strKey = $Matches[1];$strValue = $Matches[2]; if ($strKey -and $strID){$hshIniContents[$strID][$strKey] = $strValue}  
else {$hshIniContents[$strKey] = $strValue}}  
}  
}  
 
$hshIniContents["0-1-0-0"]["State"] #значение State для опредленного ID  
$hshIniContents["Num Disks"] #значение из --VOLUME INFORMATION--  
$hshIniContents["State"] #значение из --VOLUME INFORMATION--  
 

 
то получается
 

Код:
 
PS C:\Windows\system32> C:\RAID\test2.ps1
rstcli64.exe :  
C:\RAID\test2.ps1:1 знак:28
+ $str = C:\Raid\rstcli64.exe <<<<  -I -d 0-0-0-0 > C:\Raid\pdisk0.txt
    + CategoryInfo          : NotSpecified: (:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
0
 
Не удается индексировать в массив NULL.
C:\RAID\test2.ps1:12 знак:28
+ $hshIniContents["0-1-0-0"][ <<<< "State"] #значение State для опредленного ID  
    + CategoryInfo          : InvalidOperation: (State:String) [], RuntimeExcepti  
   on
    + FullyQualifiedErrorId : NullArray
 

 
Если выполнить ваш оригинальный скрипт из powershell ise, то:
 

Код:
 
$str = '--VOLUME INFORMATION--  
Num Disks: 2  
State: Normal  
--END DEVICE INFORMATION--  
 
ID: 0-0-0-0  
State: Normal  
Model: WDC WD5003ABYX-01WERA0  
 
ID: 0-1-0-0  
State: Normal  
Model: WDC WD5003ABYX-01WERA0'  
 
$hshIniContents = @{}  
$str -split "\n" | %{  
switch -regex ($_) {  
"ID:[^\d]*((\d*-?){4}).*" {$strID = $Matches[1]; if ($strID) {$hshIniContents[$strID] = @{}};break}  
"(.*):\s*([^\r\n]*)" {$strKey = $Matches[1];$strValue = $Matches[2]; if ($strKey -and $strID){$hshIniContents[$strID][$strKey] = $strValue}  
else {$hshIniContents[$strKey] = $strValue}}  
}  
}  
 
$hshIniContents["0-1-0-0"]["State"] #значение State для опредленного ID  
$hshIniContents["Num Disks"] #значение из --VOLUME INFORMATION--  
$hshIniContents["State"] #значение из --VOLUME INFORMATION--  
 

 
то результат
 

Код:
 
 
PS C:\Windows\system32> C:\RAID\test2.ps1
Не удается индексировать в массив NULL.
C:\RAID\test2.ps1:18 знак:119
+ "(.*):\s*([^\r\n]*)" {$strKey = $Matches[1];$strValue = $Matches[2]; if ($strKey
 -and $strID){$hshIniContents[$strID][ <<<< $strKey] = $strValue}  
    + CategoryInfo          : InvalidOperation: (Num Disks:String) [], RuntimeExc  
   eption
    + FullyQualifiedErrorId : NullArray
 
Не удается индексировать в массив NULL.
C:\RAID\test2.ps1:18 знак:119
+ "(.*):\s*([^\r\n]*)" {$strKey = $Matches[1];$strValue = $Matches[2]; if ($strKey
 -and $strID){$hshIniContents[$strID][ <<<< $strKey] = $strValue}  
    + CategoryInfo          : InvalidOperation: (State:String) [], RuntimeExcepti  
   on
    + FullyQualifiedErrorId : NullArray
 
Normal  
 

 
 
Если запускать ваш оригинальный скрипт из командной строки PS - то все нормально:

Код:
 
PS C:\raid> .\test2.ps1
Normal
2
Normal
 

 
текстовый файл получаемый из $cli= C:\Raid\rstcli64.exe -I -d 0-0-0-0 > C:\Raid\pdisk0.txt
 
имеет вид
 

Код:
 
--DISK INFORMATION--
 
ID:                0-0-0-0
Type:              Disk
Disk Type:         SATA Disk
State:             Normal
Size:              466 GB
Free Size:         0 GB
System Disk:       False
Usage:             Array member
Serial Number:     WD-WMAYP2205159
Model:             WDC WD5003ABYX-01WERA0                  
 

 
Смущает то что PS ругается на команду C:\Raid\rstcli64.exe и выводит 0, сейчас пробую различные варианты кавычек и скобок.

Всего записей: 4 | Зарегистр. 13-12-2013 | Отправлено: 08:42 17-12-2013 | Исправлено: chand1er, 09:29 17-12-2013
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » PowerShell
KLASS (06-03-2018 00:43): Объединение тем по сценариям: Сценарии Windows


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru