【问题标题】:PowerShell - Getting the user to select a path with File ExplorerPowerShell - 让用户使用文件资源管理器选择路径
【发布时间】:2021-02-23 22:14:18
【问题描述】:

所以我目前正在制作一个 PowerShell 脚本来放置在我们的 DC 上,它将在 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            
 }
}

这就是我的问题,这是个好主意还是每次都用更新的路径编辑脚本会更好?

感谢您对此的帮助!

迪伦

【问题讨论】:

  • 您可以使用 OpenFileDialog 框stackoverflow.com/questions/56591666/…
  • 我会使用 Christophe 提到的文件选择器对话框。但是,我会将您的代码分解为一个获取文件的函数、一个调用 New-ADUser cmdlet 的循环以及一个测试候选用户名的函数。

标签: powershell csv active-directory microsoft-file-explorer


【解决方案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
}

【讨论】:

  • 当 NOT AllowMulti 时,该函数应返回 $Dialog.FileName。 (单数)
  • @Theo - 一个有趣的改进;不过,我从来没有对现在形式的函数有任何问题。
猜你喜欢
  • 2021-12-17
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
  • 2011-02-22
相关资源
最近更新 更多