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

Компьютерный форум 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

 

Ветеран


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

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


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

Invoke-Command -ComputerName $RemoteHost -ScriptBlock {param($Command) cmd.exe /c """$Command"" /L=1033 /S" } -ArgumentList $Command
-ScriptBlock <ScriptBlock>
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}
Или $using:variable:
Код: Выделить весь код
{Command $using:var}

Последний раз редактировалось Kazun, 14-12-2015 в 12:35.

Это сообщение посчитали полезным следующие участники:

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



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

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


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


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

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


Kazun, Да так сработало, спасибо, а почему $Command пришлось вставлять в параметры и в -ArgumentList там же нет аргументов, напишите плиз как лучше передавать путь и аргументы в цикл (хочу написать скрипт по авто-установке тонны софта на тонну компьютеров)

Foreigner, Ваша запись не сработала (сложность в том что путь к исполняющему файлу написан через пробел и поэтому его необходимо взять в кавычки и передать вместе с аргументами)

Georgio, Ваша запись тоже не сработала не знаю почему

Iska, А не подскажите почему у меня в ISE вываливаются такие знаки?

Спасибо всем кто отвечает без вас было бы на много сложнее разобраться во всем этом аде!

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


Забанен


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

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


Цитата Iska:
Нет. Переменную с уже полученными объектами никак не «обновить».
Код: Выделить весь код
PS D:\src> (gci -r | ? {!$_.PSIsContainer}).Count
128
PS D:\src> $global:count = (gci -r | ? {!$_.PSIsContainer}).Count
PS D:\src> $fsw = New-Object IO.FileSystemWatcher('D:\src', '*.*') -Property @{
>> IncludeSubdirectories = $true
>> NotifyFilter = [IO.NotifyFilters]'FileName'
>> }
>>
PS D:\src> $onc = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
>> $global:count++
>> }
>>
PS D:\src> ni foobar -Type file

    Каталог: D:\src


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        14.12.2015     17:25          0 foobar

PS D:\src> $count
129
PS D:\src> [void](ni foobar1 -Type file)
PS D:\src> $count
130
PS D:\src> Unregister-Event -SourceIdentifier FileCreated
PS D:\src>

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


Ветеран


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

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


Цитата c4uran:
Iska, А не подскажите почему у меня в ISE вываливаются такие знаки? »
Некорректно использована кодировка. Т.е., вывод приложения идёт в одной кодировке, а ISE пытается его читать в другой кодировке.

greg zakharov, там сам экземпляр объекта обновляет свои свойства, следя за файловой системой. Согласитесь, это совсем не то, о чём говорил автор.
Это сообщение посчитали полезным следующие участники:

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


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


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

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


Подскажите такой момент:

в одной директории лежат 2 файла - script.ps1 и functions.ps1

в файле script.ps1 есть строка:

Код: Выделить весь код
. .\functions.ps1
которая вываливает такую ошибку:

Код: Выделить весь код
. : Имя "functions.ps1" не распознано как имя командлета,
 функции, файла сценария или выполняемой программы.
Проверьте правильность написания имени, а также наличие и
 правильность пути, после чего повторите попытку.

+ . functions.ps1
+   ~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (functions.ps1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

т.е я пытаюсь из скрипта вызвать другой скрипт с функциями, почему он не находит этот файл и вываливает такое?

Отправлено: 11:05, 15-12-2015 | #15


Ветеран


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

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


c4uran, Если запускается из другой директории, то либо пропишите полный путь к functions.ps1, либо используйте автоматическую переменную $myinvocation:
Код: Выделить весь код
. (join-path (get-item $myinvocation.mycommand.path).directory.fullname functions.ps1)
либо functions.ps1 должен быть в $env:path
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:45, 15-12-2015 | #16


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


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

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


Спасибо! а как такую запись на batch можно сделать в конвейере PS:

Код: Выделить весь код
dir c: | findstr /i "myfile"&& echo Found! || echo Not Found!

Отправлено: 09:44, 16-12-2015 | #17


Ветеран


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

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


Код: Выделить весь код
[bool](dir *myfile* -ea 0)
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:54, 16-12-2015 | #18


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


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

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


т.е полная запись выглядит так:

Код: Выделить весь код
if ([bool](dir c:\*.txt -ea 0) -eq $true) { echo "found!"} else { echo "not found!" }
а как можно без If ?

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


Ветеран


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

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


Код: Выделить весь код
if ((dir c:\*.txt -ea 0)) { "found!"} else { "not found!" }

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



Компьютерный форум 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




 
Переход