PowerShell免交互传递凭据启动Microsoft Dynamics NAV报错求助
问题解决建议
一、修复“目录名称无效”错误
先验证路径有效性:在PowerShell中执行以下命令确认文件存在:
Test-Path "C:\Program Files (x86)\Microsoft Dynamics NAV\80\RoleTailored Client\Microsoft.Dynamics.Nav.Client.exe"如果返回
False,说明路径有误,检查以下几点:- 确认NAV版本号是否为80(不同版本对应不同数字目录,比如2018对应110、2017对应100)
- 确认客户端文件夹名称是否正确,部分版本可能命名为
Microsoft Dynamics NAV Client而非RoleTailored Client - 重新从文件资源管理器复制路径时,注意不要包含多余空格或特殊字符
若路径正确但仍报错,尝试添加
-WorkingDirectory参数指定程序所在目录:Start-Process -FilePath "C:\Program Files (x86)\Microsoft Dynamics NAV\80\RoleTailored Client\Microsoft.Dynamics.Nav.Client.exe" ` -Credential $Cred ` -WorkingDirectory "C:\Program Files (x86)\Microsoft Dynamics NAV\80\RoleTailored Client"
二、实现完全免交互启动
使用Dynamics NAV客户端自带的命令行参数传递凭据,替代Start-Process -Credential(该方式可能因系统Session隔离或程序机制触发弹窗):
修改脚本如下:
# 预存凭据 $Username = "domain\x" $Password = "x" # 构造NAV客户端启动参数,需替换为实际服务器和公司名称 $navPath = "C:\Program Files (x86)\Microsoft Dynamics NAV\80\RoleTailored Client\Microsoft.Dynamics.Nav.Client.exe" $navArgs = @( "-ServerName", "你的NAV服务器名称", "-CompanyName", "目标公司名称", "-UserName", $Username, "-Password", $Password ) # 启动程序(无需使用-Credential参数) & $navPath $navArgs
关键说明:
-ServerName和-CompanyName为必填参数,需替换为你的实际配置(若客户端已设置默认值可省略)- 这种方式直接通过程序自身参数传递凭据,避免系统级身份验证弹窗
- 若不想明文存储密码,可先将密码加密保存到文件,脚本运行时读取:
# 仅需执行一次:保存加密后的密码到文件 "x" | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File "C:\temp\navPassword.txt" # 脚本中读取并解密密码 $securePassword = Get-Content "C:\temp\navPassword.txt" | ConvertTo-SecureString $password = [System.Net.NetworkCredential]::new("", $securePassword).Password
三、其他排查点
- 确保指定的用户账户有权限访问NAV服务器和客户端安装目录
- 若运行脚本的用户是本地管理员,尝试以普通用户权限测试
- 查看NAV客户端的应用程序事件日志(事件查看器→应用程序日志),获取更详细的错误信息
内容的提问来源于stack exchange,提问作者PhatCash
相关产品推荐
相关产品推荐

