none
Неизвестное количество параметров в аргументах задачи Планировщика задач. RRS feed

  • Вопрос

  • Доброго времени суток.

    Windows 2012 R2, Powershell v4.

    Скрипт ps1 помещен в задачу Планировщика задач, некоторые переменные задаются как аргументы. Но есть необходимость задать таким образом несколько переменных, при чем они будут участвовать в условии, однако, я не знаю точного их количества, например в скрипте это выглядело бы так:

    $a = "E:\1"
    
    $b= "E:\2"
    
    $Folders = Get-Childitem "E:\X" -Recurse -Directory | Where-Object {($_.Fullname -ne $a) -and ($_.Fullname -ne $b)}

    В аргументах задачи выглядело бы так: -command -file "путь_к_сценарию" -a "E:\1" -b "E:\2"

    Существует ли возможность без изменения скрипта задавать в аргументах задачи разное количество параметров (переменных). Подозреваю это должен быть массив, но возможно ли создать условие ($_.Fullname -ne "одному_из_элементов_массива")?

    И логичный второй вопрос: гугл мне к сожалению не сказал ограничение поля "Аргументы" задачи планировщика, но тестовым путем установил что 1000 символов точно можно ввести, НО эти символы пойдут как команды при запуске программы Powershell, а ограничение интерфейса Start-Run насколько я знаю 259 символов. Не будет ли проблем в случае если количество символов в поле "Аргументы" превысит это значение?



    17 декабря 2014 г. 8:38

Ответы

Все ответы

  • 1)Существует ли возможность без изменения скрипта задавать в аргументах задачи разное количество параметров (переменных). - Да, можно, но когда четко представляют, что требуется. 

    ($_.Fullname -ne "одному_из_элементов_массива") :

    "a","b","c","d" -notcontains "a"

    2) И логичный второй вопрос - Как раз он нелогичный, т.к. объяснить четко задачу не получается.

    я не знаю точного их количества - Как тогда собираетесь передавать через Планировщик, когда требуется четкое определение параметров?)

    17 декабря 2014 г. 8:50
    Отвечающий
  • Я не корректно выразился. Я буду знать количество параметров и их значения для каждой конкретной задачи, но не для общего случая, поэтому задать их точное количество в сценарии я не могу. Например задача 1 будет иметь 2 переменных со значениями "E:\1" и "E:\2", задача 2 - 3 переменных со значениями "E:\3", "E:\4" и "E:\5". Можно ли сделать так, чтобы сценарий оставался неизменным, а количество переменных, задаваемых в аргументе менялось?
    17 декабря 2014 г. 8:59
  • Это не задача. Зачем плодить переменные, когда можно ограничиться одной?

    param([string[]]$array)
    $array


    17 декабря 2014 г. 9:03
    Отвечающий
  • Сам скрипт (ищет пустые папки, но не должен помещать в $EmptyFolders папки, пути которых заданы в $NoDelFolder):

    param(
        [parameter(Mandatory = $true)]
        [string[]]$NoDelFolder
         )
    $EmptyFolders = Get-ChildItem -Path "E:\Startx" -Directory -Recurse | Where-Object {((Get-ChildItem -Path $_.FullName -Recurse) -eq $null) -and ($_.FullName -ne $NoDelFolder)}

    Запуск из Powershell:

    C:\Users\kopilov\Desktop\arraytest.ps1 -NoDelFolder "E:\Startx\1","E:\Startx\stat1\GAR\7","E:\Startx\stat1\GAR\Garant-Client\4"

    Пустые папки помещаются в $EmptyFolder, при чем все, то есть условие 

    -and ($_.FullName -ne $NoDelFolder)

    не работает.

    17 декабря 2014 г. 9:36
  • Если точно известно:

    $EmptyFolders = Get-ChildItem -Path "E:\Startx" -Directory -Recurse | Where-Object {$NoDelFolder -notcontains $_.FullName}

    А для уверенности, что папка пустая:
    Where-Object {(Get-ChildItem -Path $_.FullName -Recurse) -eq $null}
    


    17 декабря 2014 г. 9:59
    Отвечающий
  • Вы правы, это работает. Мне очень туго дается эта логика. Т.е. если одно из $EmptyFolders.Fullname, переданных с конвейера, попало в $NoDelFolder, то возвращается False (ведь оно contains), и с этими папками не делается ничего, если же имя не попадает в $NoDelFolder, то возвращается True и такие папки заносятся в $EmptyFolders переменную, верно?
    17 декабря 2014 г. 10:12
  • Да:

    PS > "E:\1","E:\2","E:\3" | Where {"E:\1","E:\5","E:\6" -notcontains $_}
    E:\2
    E:\3

    17 декабря 2014 г. 10:23
    Отвечающий
  • Спасибо, вы мне очень помогли.
    17 декабря 2014 г. 10:30