Скрипт Autohokey не получает результат правильно из буфера обмена PowerShell - PullRequest
0 голосов
/ 10 октября 2018

Я написал этот простой скрипт Autohotkey, чтобы извлечь имя пользователя AD из данного описания, а затем посмотреть, заблокирован ли идентификатор пользователя или нет.

Половина скрипта работает нормально, кроме той части, где 2-я команда Powershell:

Ver="%Ver%"
Runwait, PowerShell.exe -Command (Get-Aduser %Ver% -Properties LockedOut).LockedOut | clip,,hide
Result=%clipboard%

эта часть выше, работает, только если она одна на другом скрипте.по какой-то причине буфер обмена первой команды powershell, который получает имя пользователя (SamAccountName), не перезаписывается значением 2-й команды powershell.Это приводит к тому, что предыдущее значение буфера обмена застревает, и поэтому 2-ая команда терпит неудачу, поскольку ее значение должно показывать «True или False» вместо предыдущего значения UserName.

полный сценарий ниже.Кто-нибудь может посоветовать, чего здесь не хватает?

    ShowMainGui:
 {

 ;## Read cach file for history and if empty clear it value
IniRead, readfile, %A_MyDocuments%\Luser.ini, main, Key


If (readfile = "ERROR")
{
readfile =
}
Else
{

} 



 InputBox, UserInput, Enter CorpNO, Please enter CorpNO:, , 250, 150, 700,340 , , , %readfile%

if ErrorLevel {
    exit
    }
else
 {

  ;##log Corp to Logfile first
 IniWrite, %userinput%, %A_MyDocuments%\Luser.ini, main, Key

 ;;from Description to username
 Runwait, PowerShell.exe -Command "Get-AdUser -Filter {(description -like '%UserInput%')} | foreach { $_.SamAccountName } | clip",, hide


Ver =%clipboard%

 StringReplace , Ver, Ver, %A_Space%,,All

Msgbox, 262144, The user name is ,%Ver%




 ;;; check if the user ID is Locked or not. False or True should be the result

 Ver:="%Ver%"

Runwait, PowerShell.exe -Command (Get-Aduser %Ver% -Properties LockedOut).LockedOut | clip,,hide
Result=%clipboard%
Msgbox, 262144, False or true,%Result%

 ;;; end of checking



 If InStr(Result, "False") {
    Msgbox, 262144, Attention, your account is not locked!
    Goto, ShowMainGui
}

 MsgBox 4,, Account Locked! Do you want to Unlock it?
IfMsgBox Yes
{

 Run, PowerShell.exe -Command "Unlock-ADAccount -Identity %Ver%",, hide
 MsgBox 4,, Account is UnLocked!

}

IfMsgBox no
{
 Goto, ShowMainGui

}





}
}

1 Ответ

0 голосов
/ 11 октября 2018

Спасибо всем!

Я сам все понял.все, что мне нужно сделать, это связать всю команду в одну строку.если PowerShell разрешает несколько команд в одной строке, то почему это не Autohotkey;)

Не знаю, почему я пока не могу перезаписать значение буфера обмена, и я буду копать больше, чтобы узнать почему, но здесьэто обе строки команд в одной строке.работать как шарм:

Runwait, PowerShell.exe -Command "$qaz = Get-AdUser -Filter {(description -like '%ver%')} | foreach { $_.SamAccountName }"; "Get-ADUser $qaz -Properties LockedOut | foreach { $_.Lockedout } | clip",, hide
...