Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Как пересчитывают значение переменных

Ответить
Настройки темы
PowerShell - Как пересчитывают значение переменных

Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


В связи с попытками разобраться с PS постоянно появляются вопросы, объясните пожалуйста вот эту простую вещь:

Код: Выделить весь код
$TestFolder = "c:\temp\testfolder"
$TestFile = $TestFolder + "\newfile.txt"

if (-not(Test-Path $TestFolder)) { New-Item $TestFolder -ItemType "Directory" }
if (Test-Path $TestFile) { Remove-Item $TestFile -Force }

$files = (Get-ChildItem $TestFolder -File)


function CreateFile { IF (-not(Test-Path $TestFolder)) { New-Item $TestFile -ItemType "file" }  }


if ($files.count -eq 0) { CreateFile } 
if ($files.count -eq 0) { echo "Why count = 0 ?" }

Как пересчитывают значение $files.count заново: $files = (Get-ChildItem $TestFolder -File) - это понятно но нет ли способа $files.count в скобки какие нибудь взять или не знаю... обновить переменную

Отправлено: 16:03, 10-12-2015

 

Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


c4uran, В данном случае если нет файлов в TestFolder, то и не будет переменной $files, соответственно и не будет $files.count. Проверяйте определение переменной:
Код: Выделить весь код
if (!$files) { CreateFile }
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:40, 10-12-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата c4uran:
но нет ли способа $files.count в скобки какие нибудь взять или не знаю... обновить переменную »
Нет. Переменную с уже полученными объектами никак не «обновить». Вам так или иначе придётся заново «опросить» каталог, будь то «Get-ChildItem … -File» или «([System.IO.DirectoryInfo]'…').GetFiles()» и т.п.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:00, 10-12-2015 | #3


Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


А подскажите как экранируются в этом случае переменная: $Command

Код: Выделить весь код
$RemoteHost = "computer1"
$Command = "d:\vlc 210.exe"

Invoke-Command -ComputerName $RemoteHost -ScriptBlock { & cmd.exe /c "$Command /L=1033 /S" }

так она работает:

Код: Выделить весь код
... {& cmd.exe /c """d:\vlc 210.exe"" /L=1033 /S" }
а первый пример - нет

Отправлено: 10:59, 14-12-2015 | #4


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Также и экранируются:

Код: Выделить весь код
cmd.exe /c """$Command"" /L=1033 /S"

Отправлено: 11:16, 14-12-2015 | #5


Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


Kazun, не работает вываливает такое:


+ CategoryInfo : NotSpecified: ("/L" *Ґ пў«пҐвбп ў*гваҐ**Ґ© Ё«Ё ў*Ґи*Ґ©:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
+ PSComputerName : computer

Отправлено: 11:26, 14-12-2015 | #6


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


А если так?

Код: Выделить весь код
cmd.exe /c """$Command"" ""/L=1033"" /S"

Отправлено: 11:35, 14-12-2015 | #7


Пользователь


Сообщения: 122
Благодарности: 6

Профиль | Отправить PM | Цитировать


так работает:

Код: Выделить весь код
{ & cmd.exe /c """$Command"" " }
а с аргументами нет:

Код: Выделить весь код
"""$Command"" ""/L=1033"" /S"
+ CategoryInfo : NotSpecified: ("" "" *Ґ пў«пҐвбп ў*гваҐ**Ґ© Ё«Ё ў*Ґи*Ґ©:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

Отправлено: 11:45, 14-12-2015 | #8


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Переведу:
Цитата c4uran:
*Ґ пў«пҐвбп ў*гваҐ**Ґ© Ё«Ё ў*Ґи*Ґ© »
«Не является внутренней или внешней…».
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:57, 14-12-2015 | #9


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


c4uran, В переменную $Command поместите всю команду, с аргументами:
Код: Выделить весь код
$command = "dir /b D:\"
$invoke-command -script { cmd /c $command }

Отправлено: 11:59, 14-12-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Как пересчитывают значение переменных

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как получить значение параметра из реестра, добавить значение в текстовый файл etc.? Dark Ange1 Скриптовые языки администрирования Windows 28 22-06-2022 14:37
Загрузка - XP SP3. Значение «громкость» сбрасывается в среднее значение при перезагрузке. mitkadritka Microsoft Windows 2000/XP 9 24-02-2012 20:37
CMD/BAT - [решено] Как организовать вызов bat с большим количеством переменных и их обработку? seriych Скриптовые языки администрирования Windows 13 27-01-2011 15:48
Как определить кодировку строки передаваемой как значение параметра OLE-серверу Excel RUVATA AutoIt 12 13-12-2010 23:22
[решено] Как подсчитать сумму нескольких переменных Не флужу AutoIt 4 13-08-2009 06:24




 
Переход