PowerShell - заставляет пользователя выбирать путь с помощью проводника
Итак, в настоящее время я создаю сценарий PowerShell для размещения на нашем контроллере домена, который будет создавать пользователей в Active Directory, он будет использовать функции для отображения меню и выполнения команд и позволит создавать одного пользователя или CSV.
Я пытаюсь сделать это как можно более идиотским доказательством и устранить как можно больше человеческих ошибок. Что я хотел бы сделать, так это запросить у пользователя окно проводника, чтобы, когда функция CSV ищет путь к самому CSV для импорта, пользователь сначала открыл его в проводнике, устраняя необходимость вводить полный путь к файлу.
Вот моя функция CSV в настоящее время для справки:
function csv {
$Path = read-host "Where is the CSV stored? Make sure it is in a Readable Location"
# Here is where The user would be prompted for the path of the CSV
$Users = Import-Csv -Path $Path
foreach ($User in $Users)
{
$Displayname = $User.'Firstname' + " " + $User.'Lastname'
$UserFirstname = $User.'Firstname'
$UserLastname = $User.'Lastname'
$OU = $User.'OU'
$SAM = $User.'SAM'
$UPN = $User.'Firstname' + "." + $User.'Lastname' + "@" + $User.'Maildomain'
$Description = $User.'Description'
$Password = $User.'Password'
New-ADUser -Name "$Displayname" -DisplayName "$Displayname" -SamAccountName $SAM -UserPrincipalName $UPN -GivenName "$UserFirstname" -Surname "$UserLastname" -Description "$Description" -AccountPassword (ConvertTo-SecureString $Password -AsPlainText -Force) -Enabled $true -Path "$OU" -ChangePasswordAtLogon $false –PasswordNeverExpires $true
}
}
Итак, это моя проблема, это хорошая идея или было бы лучше каждый раз редактировать скрипт с обновленным путем?
Спасибо за помощь!
Дилан
1 ответ
Я использую следующую функцию, которую можно вызвать, например,
$FileName = Select-File -StartingFolder "C:\Users\Michael\Documents" -NameFilter "CSV Files (*.CSV)|*.CSV"
function Select-File {
[CmdletBinding()]
param(
[Parameter(ParameterSetName="Single")]
[Parameter(ParameterSetName="Multi")]
[Parameter(ParameterSetName="Save")]
[string]$StartingFolder = [environment]::getfolderpath("mydocuments"),
[Parameter(ParameterSetName="Single")]
[Parameter(ParameterSetName="Multi")]
[Parameter(ParameterSetName="Save")]
[string]$NameFilter = "All Files (*.*)|*.*",
[Parameter(ParameterSetName="Single")]
[Parameter(ParameterSetName="Multi")]
[Parameter(ParameterSetName="Save")]
[switch]$AllowAnyExtension,
[Parameter(Mandatory=$true,ParameterSetName="Save")]
[switch]$Save,
[Parameter(Mandatory=$true,ParameterSetName="Multi")]
[Alias("Multi")]
[switch]$AllowMulti
)
if ($Save) {
$Dialog = New-Object -TypeName System.Windows.Forms.SaveFileDialog
} else {
$Dialog = New-Object -TypeName System.Windows.Forms.OpenFileDialog
if ($AllowMulti) {
$Dialog.Multiselect = $true
}
}
if ($AllowAnyExtension) {
$NameFilter = $NameFilter + "|All Files (*.*)|*.*"
}
$Dialog.Filter = $NameFilter
$Dialog.InitialDirectory = $StartingFolder
[void]($Dialog.ShowDialog())
$Dialog.FileNames
}