请问,如何在AU3中引用powershell命令,并使其自动运行?
各位前辈,大家好!本人需要在AU3中引用两条powershell命令,分别是:
Set-SmbClientConfiguration -RequireSecuritySignature $false(要求管理员权限)
Set-SmbClientConfiguration -EnableInsecureGuestLogons $true(要求管理员权限)
而且,这两条命令在执行过程中,均会出现如下问题:
“确认
是否确实要执行此操作?
正在执行操作“Modify”(针对目标“SMB Client Configuration”)。
是(Y) 全是(A) 否(N) 全否(L) 暂停(S)[?] 帮助 (默认值为“Y”):”
此处,应回答“ 是(Y)”。
并且希望整个AU3在后台自动运行,即是无人值守的运行。
由于对power shell命令不熟悉,特地在这里请教各位前辈,如何编写上述AU3文件?多谢各位前辈!
本帖最后由 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("")
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命令执行。如果有任何问题,请随时提问!
lpxx 发表于 2025-1-3 18:34
在AutoIt(AU3)中执行PowerShell命令,并且处理确认提示,可以通过以下步骤实现。你需要使用AutoIt的Run函 ...
非常感谢lpxx大佬的回复!
有代码,还有解释;使我既知其然,又知其所以然;万分感谢!
对不起,由于生病,我回复晚了,再次感谢lpxx大佬! lpxx 发表于 2025-1-3 18:34
在AutoIt(AU3)中执行PowerShell命令,并且处理确认提示,可以通过以下步骤实现。你需要使用AutoIt的Run函 ...
再问lpxx大佬一下,我运行的时候报错:
Global $powershell_script = "
Error:Unterminated string
似乎是
Global $powershell_script = "
`$scriptBlock = {
" & $cmd1 & ";
" & $cmd2 & "
};
& `$scriptBlock
"
代码段出问题,当然也可能是我的autoit版本过老。
大佬能帮助解决一下吗,谢谢了! evilwz 发表于 2025-1-6 10:19
再问lpxx大佬一下,我运行的时候报错:
Global $powershell_script = "
Error:Unterminated string
powershell我也不熟,你那个错误估计是拆开后导致的,把它合并成一行,注意单引号和双引号的补全,然后看看相应生成的脚本是否正确,依次修改,大致如此。那个回复是用AI测试回复的。 lpxx 发表于 2025-1-8 12:16
powershell我也不熟,你那个错误估计是拆开后导致的,把它合并成一行,注意单引号和双引号的补全,然后看 ...
好的,再次感谢lpxx大佬! lpxx 发表于 2025-1-8 12:16
powershell我也不熟,你那个错误估计是拆开后导致的,把它合并成一行,注意单引号和双引号的补全,然后看 ...
lpxx大佬主要解决了我的两个问题:
1、使用-Confirm:$false来自动应答,自动确认。
2、使用powershell -ExecutionPolicy Bypass -File传递管理员权限。
只要这两个问题解决了,其他的问题都是小问题。
顺便说一下,开始运行一直有错误,后来发现我没有使用64位运行,这个要注意。
再次感谢lpxx大佬! :face (17)::face (25):
页:
[1]