Самое простое решение - заставить ваш скрипт принять целевой файл в качестве аргумента , объявив параметр :
param(
# Declare a mandatory parameter to which the file path of the CSV
# file to import must be passed as an argument on invocation.
[Parameter(Mandatory)]
[string] $FilePath
)
$names = Import-Csv $FilePath -Header Givenname,Surname -Delimiter ";"
foreach ($Name in $Names) {
$FirstFilter = $Name.Givenname
$SecondFilter = $Name.Surname
Get-ADUser -Filter {GivenName -like $FirstFilter -and Surname -like $SecondFilter} |
select Enabled, SamAccountName, DistinguishedName,
@{n="ou";e={($_.DistinguishedName -split ",*..=")[2]}} |
Export-Csv .\sam.csv -NoTypeInformation -Append
}
Если вы вызовете свой скрипт без пути к файлу, вам будет предложено для него; давайте предположим, что ваш скрипт находится в текущем каталоге. и его зовут someScript.ps1
:
./someScript # invocation with no argument prompts for a value for $FilePath
К сожалению, такой автоматический запрос не удобен для пользователя и предлагает без завершения табуляции .
Тем не менее, в командной строке Завершение вкладки PowerShell по умолчанию завершает имена файлов и каталогов в текущем местоположении , так что
./someScript <press tab here>
циклически просматривает все файлы и каталоги в текущей папке.
Вы можете даже ввести выражение подстановочного знака и завершить табуляцией , что , , если вы не знаете полное имя файла или не хотите вводить его полностью:
./someScript *.csv<press tab here>
Это будет циклически перебирать все файлы *.csv
в текущем каталоге. только.
Если вы хотите пойти еще дальше и настроить завершение вкладки , чтобы циклически проходить только по *.csv
файлам , вы можете использовать атрибут [ArgumentCompleter({ ... })]
( PSv5 +):
param(
[Parameter(Mandatory)]
# Implement custom tab-completion based on only the *.csv files in the current dir.
[ArgumentCompleter({
param($cmd, $param, $wordToComplete)
Get-ChildItem -Name "$wordToComplete*.csv"
})]
[string] $FilePath
)
# ...
Теперь
./someScript <tab>
будет циклически перемещаться только по файлам *.csv
в текущем каталоге, если таковые имеются.
Примечание. По-видимому, завершение табуляции аргумента empty без завершений-кандидатов (в данном случае без *.csv
файлов) возвращается к завершению файла и имени каталога по умолчанию.
Аналогично,
./someScript 1<tab>
будет циклически перемещаться только по файлам *.csv
в текущем каталоге, имя которого начинается с 1
, если есть.
В качестве альтернативы использованию атрибута как части определения скрипта / функции, вы можете использовать PSv5 + Register-ArgumentCompleter
командлет , чтобы присоединять дополнения табуляции к параметрам any команда , т.е. включая уже существующие.
В PSv4- у вас есть два (громоздких) варианта завершения пользовательской вкладки:
Использовать динамический параметр с динамически созданным атрибутом [ValidateSet()]
- см. Ссылку в Ответ Рохина Сидхарта .
Настройте функцию tabexpansion2
(PSv3, PSv4) / tabexpansion
(PSv1, PSv2), но убедитесь, что случайно не заменили существующую функциональность.