PowerShell中使用Start-Process启动AnyDesk如何传递密码实现自动连接?
解决方案
错误原因
你之前的写法出错是因为AnyDesk的--with-password参数作用是告知程序需要从标准输入流读取密码,而非直接将密码作为启动参数传递,把密码放在ArgumentList里的写法不符合AnyDesk的CLI调用规则。
实现方法
方法1:使用Start-Process配合标准输入重定向
你需要借助临时文件将密码传递给进程的标准输入:
# 先将密码写入临时文件,注意使用ASCII编码避免字符解析异常 $config.connect_pw | Out-File -FilePath "anydesk_temp_pw.tmp" -Encoding ASCII -Force # 启动进程时指定标准输入源,参数列表移除密码项 $app = Start-Process $config.anydesk_path -ArgumentList @($config.ip_addresses[$i], "--plain", "--with-password") -RedirectStandardInput "anydesk_temp_pw.tmp" -PassThru -NoNewWindow # 等待进程读取密码后删除临时文件,避免密码泄露 Start-Sleep -Milliseconds 300 Remove-Item "anydesk_temp_pw.tmp" -Force
方法2:使用.NET Process类直接写入标准输入(更推荐)
该方法不需要创建临时文件,安全性和兼容性更好,也能正常获取进程ID:
# 配置进程启动信息 $processStartInfo = [System.Diagnostics.ProcessStartInfo]::new() $processStartInfo.FileName = $config.anydesk_path $processStartInfo.Arguments = "$($config.ip_addresses[$i]) --plain --with-password" $processStartInfo.RedirectStandardInput = $true $processStartInfo.UseShellExecute = $false $processStartInfo.CreateNoWindow = $true # 启动进程 $app = [System.Diagnostics.Process]::new() $app.StartInfo = $processStartInfo $null = $app.Start() # 直接向标准输入流写入密码 $app.StandardInput.WriteLine($config.connect_pw) $app.StandardInput.Flush() $app.StandardInput.Close()
注意事项
- 确保你使用的AnyDesk客户端版本支持
--with-password参数,部分老旧版本无该特性 - 如果密码包含特殊字符,推荐使用第二种方法,不会出现参数转义异常的问题
- 执行完成后建议清空内存中存储密码的变量,降低泄露风险
内容的提问来源于stack exchange,提问作者Dayaa
相关产品推荐
相关产品推荐

