![]() |
Как пересчитывают значение переменных
В связи с попытками разобраться с PS постоянно появляются вопросы, объясните пожалуйста вот эту простую вещь:
Код:
$TestFolder = "c:\temp\testfolder" Как пересчитывают значение $files.count заново: $files = (Get-ChildItem $TestFolder -File) - это понятно но нет ли способа $files.count в скобки какие нибудь взять или не знаю... обновить переменную |
c4uran, В данном случае если нет файлов в TestFolder, то и не будет переменной $files, соответственно и не будет $files.count. Проверяйте определение переменной:
Код:
if (!$files) { CreateFile } |
Цитата:
|
А подскажите как экранируются в этом случае переменная: $Command
Код:
$RemoteHost = "computer1" так она работает: Код:
... {& cmd.exe /c """d:\vlc 210.exe"" /L=1033 /S" } |
Также и экранируются:
Код:
cmd.exe /c """$Command"" /L=1033 /S" |
Kazun, не работает вываливает такое:
+ CategoryInfo : NotSpecified: ("/L" *Ґ пў«пҐвбп ў*гваҐ**Ґ© Ё«Ё ў*Ґи*Ґ©:String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError + PSComputerName : computer |
А если так?
Код:
cmd.exe /c """$Command"" ""/L=1033"" /S" |
так работает:
Код:
{ & cmd.exe /c """$Command"" " } Код:
"""$Command"" ""/L=1033"" /S" + FullyQualifiedErrorId : NativeCommandError |
Переведу:
Цитата:
|
c4uran, В переменную $Command поместите всю команду, с аргументами:
Код:
$command = "dir /b D:\" |
Код:
$RemoteHost = "computer1" By default, any variables in the command are evaluated on the remote computer. To include local variables in the command, use the ArgumentList parameter. Для передачи параметров в удаленную сессию, используем параметр ArgumentList. Код:
{param($var1,$var2) Command $var1 $var2} Код:
{Command $using:var} |
Kazun, Да так сработало, спасибо, а почему $Command пришлось вставлять в параметры и в -ArgumentList там же нет аргументов, напишите плиз как лучше передавать путь и аргументы в цикл (хочу написать скрипт по авто-установке тонны софта на тонну компьютеров)
Foreigner, Ваша запись не сработала (сложность в том что путь к исполняющему файлу написан через пробел и поэтому его необходимо взять в кавычки и передать вместе с аргументами) Georgio, Ваша запись тоже не сработала :( не знаю почему Iska, А не подскажите почему у меня в ISE вываливаются такие знаки? Спасибо всем кто отвечает без вас было бы на много сложнее разобраться во всем этом аде! |
Цитата:
Код:
PS D:\src> (gci -r | ? {!$_.PSIsContainer}).Count |
Цитата:
greg zakharov, там сам экземпляр объекта обновляет свои свойства, следя за файловой системой. Согласитесь, это совсем не то, о чём говорил автор. |
Подскажите такой момент:
в одной директории лежат 2 файла - script.ps1 и functions.ps1 в файле script.ps1 есть строка: Код:
. .\functions.ps1 Код:
. : Имя "functions.ps1" не распознано как имя командлета, т.е я пытаюсь из скрипта вызвать другой скрипт с функциями, почему он не находит этот файл и вываливает такое? |
c4uran, Если запускается из другой директории, то либо пропишите полный путь к functions.ps1, либо используйте автоматическую переменную $myinvocation:
Код:
. (join-path (get-item $myinvocation.mycommand.path).directory.fullname functions.ps1) |
Спасибо! а как такую запись на batch можно сделать в конвейере PS:
Код:
dir c: | findstr /i "myfile"&& echo Found! || echo Not Found! |
Код:
[bool](dir *myfile* -ea 0) |
т.е полная запись выглядит так:
Код:
if ([bool](dir c:\*.txt -ea 0) -eq $true) { echo "found!"} else { echo "not found!" } |
Код:
if ((dir c:\*.txt -ea 0)) { "found!"} else { "not found!" } |
Kazun, If здесь все же присутствует
По поводу пересчета переменных, как тогда записать такой пример: Код:
Invoke-Command -ComputerName 'computername' -ScriptBlock { gwmi win32_product } Код:
$command = gwmi win32_product |
c4uran, Может будет проще без Invoke-Command? У Get-WmiObject есть параметр -ComputerName
|
Код:
$command = {gwmi win32_product} |
Kazun, То что нужно!
какую роль играют скобки в переменной в этом случае? Foreigner, Тоже правда но интересно как работает invoke |
about_Script_Blocks - https://technet.microsoft.com/en-us/.../hh847893.aspx
|
Время: 08:32. |
Время: 08:32.
© OSzone.net 2001-