本帖最后由 lpxx 于 2025-1-4 13:32 编辑
在AutoIt(AU3)中执行PowerShell命令,并且处理确认提示,可以通过以下步骤实现。你需要使用AutoIt的Run函数来执行PowerShell脚本,并通过管道传递输入来自动确认提示。
以下是一个示例脚本,展示了如何在AutoIt中执行你提到的两条PowerShell命令,并自动确认操作:; 定义PowerShell命令
Global $cmd1 = 'Set-SmbClientConfiguration -RequireSecuritySignature $false -Confirm:$false'
Global $cmd2 = 'Set-SmbClientConfiguration -EnableInsecureGuestLogons $true -Confirm:$false'
; 使用 -Confirm:$false 参数来避免确认提示
Global $powershell_script = "
`$scriptBlock = {
" & $cmd1 & ";
" & $cmd2 & "
};
& `$scriptBlock
"
; 将PowerShell脚本保存到一个临时文件
Global $tempFile = @TempDir & '\smb_config.ps1'
FileWrite($tempFile, $powershell_script)
; 使用Run函数执行PowerShell脚本,并传递管理员权限
Global $runCmd = 'powershell -ExecutionPolicy Bypass -File "' & $tempFile & '"'
Run(@ComSpec & ' /c ' & $runCmd, '', @SW_HIDE, $STDOUT_CHILD + $STDERR_CHILD)
; 等待PowerShell脚本执行完成
Local $handle = _WinWaitActive("[CLASS:ConsoleWindowClass]")
If $handle Then
Local $result = ""
While True
Local $line = _StdioRead($handle + $STDOUT_CHILD)
If @error Then ExitLoop
$result &= $line & @CRLF
WEnd
_StdioClose($handle + $STDOUT_CHILD)
_StdioClose($handle + $STDERR_CHILD)
WinClose($handle)
; 打印结果(可选)
ConsoleWrite($result)
EndIf
; 删除临时文件
FileDelete($tempFile)
解释
PowerShell命令:
使用 -Confirm:$false 参数来避免PowerShell命令的确认提示。
将两条命令合并到一个脚本块中,以便一次性执行。
临时文件:
将PowerShell脚本保存到一个临时文件中,以便通过命令行执行。
执行PowerShell脚本:
使用 Run 函数执行PowerShell脚本,并通过 @ComSpec(通常是 cmd.exe)来启动,确保以管理员权限运行。
使用 @SW_HIDE 隐藏命令行窗口。
使用 $STDOUT_CHILD + $STDERR_CHILD 捕获标准输出和标准错误。
等待脚本执行完成:
使用 _WinWaitActive 等待PowerShell窗口变为活动窗口。
使用 _StdioRead 读取输出。
关闭标准输出和标准错误流,并关闭窗口。
清理:
删除临时文件。
注意事项
管理员权限:确保AutoIt脚本以管理员权限运行,否则PowerShell命令可能无法执行。
PowerShell执行策略:脚本中使用了 -ExecutionPolicy Bypass 参数来绕过执行策略限制。在生产环境中,请考虑使用更安全的执行策略。
希望这个示例能帮助你实现无人值守的PowerShell命令执行。如果有任何问题,请随时提问!
|