Изменить сценарий O365, чтобы изменить название должности с запросами пользователя на ввод? - PullRequest
0 голосов
/ 31 мая 2019

Я создал сценарий для изменения названия должности пользователя Office 365. Однако, когда я этого захочу, есть два поля приглашения пользователя, запрашивающие ввод адреса электронной почты, а затем новую запись названия должности, а не меняющие электронную почту и заголовок пользователя. каждый раз.

$user = Read-Host -Prompt 'Input the users email address'
$job = Read-Host -Prompt 'Enter the new Job Title'
Set-MsolUser -UserPrincipalName $user  -Title $job

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Как всегда при использовании пользовательского ввода, либо из команды Read-Host, либо с помощью поля ввода, вы должны НИКОГДА не полагаться на его правильность.

Всегда вводить в некотором родепроверки ввода пользователя, например:

while ($true) {
    Clear-Host
    $upn = Read-Host -Prompt 'Input the users UserPrincipalName. Type Q to quit.'
    if ($upn -eq 'Q') {break}

    # test if we can find a user with the entered UserPrincipalName
    $user = Get-MsolUser -UserPrincipalName $upn
    if ($user) {
        $job = Read-Host -Prompt 'Enter the new Job Title'
        Write-Host "Updating title for user $($user.DisplayName) from '$($user.Title)' to '$job'"
        $user | Set-MsolUser -Title $job
    }
    else {
        Write-Warning "User with UserPrincipleName $upn not found. Please try again."
    }
    Start-Sleep -Seconds 3
}
0 голосов
/ 31 мая 2019

Это не так уж сложно!

Вот небольшая вспомогательная функция, которую вы можете использовать, чтобы сделать самый простой в мире графический интерфейс для ввода текста в PowerShell, с параметрами для настройки заголовка и сообщения, отображаемого пользователю.

Function Get-TextInput {
Param($Description='Please enter the information in the space below:',$Title="Data Entry Form")
    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing

    $form = New-Object System.Windows.Forms.Form
    $form.Text = $Title
    $form.Size = New-Object System.Drawing.Size(300,200)
    $form.StartPosition = 'CenterScreen'

    $OKButton = New-Object System.Windows.Forms.Button
    $OKButton.Location = New-Object System.Drawing.Point(75,120)
    $OKButton.Size = New-Object System.Drawing.Size(75,23)
    $OKButton.Text = 'OK'
    $OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
    $form.AcceptButton = $OKButton
    $form.Controls.Add($OKButton)

    $CancelButton = New-Object System.Windows.Forms.Button
    $CancelButton.Location = New-Object System.Drawing.Point(150,120)
    $CancelButton.Size = New-Object System.Drawing.Size(75,23)
    $CancelButton.Text = 'Cancel'
    $CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
    $form.CancelButton = $CancelButton
    $form.Controls.Add($CancelButton)

    $label = New-Object System.Windows.Forms.Label
    $label.Location = New-Object System.Drawing.Point(10,20)
    $label.Size = New-Object System.Drawing.Size(280,20)
    $label.Text = $Description
    $form.Controls.Add($label)

    $textBox = New-Object System.Windows.Forms.TextBox
    $textBox.Location = New-Object System.Drawing.Point(10,40)
    $textBox.Size = New-Object System.Drawing.Size(260,20)
    $form.Controls.Add($textBox)

    $form.Topmost = $true

    $form.Add_Shown({$textBox.Select()})
    $result = $form.ShowDialog()

    if ($result -eq [System.Windows.Forms.DialogResult]::OK)
    {
        $x = $textBox.Text
        $x
    }
}

Дает вам такой интерфейс:

enter image description here

Вот как бы вы его использовали:

#Include the whole function in the body of the script here
$UserPrincipleName = Get-TextInput -Description "Enter User Name" -Title "MSOL Script"
$UserTitle = Get-TextInput -Description "Enter Title For this position" -Title "MSOL Script"
Set-MsolUser -UserPrincipalName $UserPrincipleName -Title $UserTitle

Если вы хотите узнать, как это делается, проверьте один из этих двух источников:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...