工作中有一个我需要经常进入的数据库,但你需要运行MSSQL2005作为一个不同的Windows帐户才能进入它。我厌倦了查找密码,右键单击快捷方式并告诉它以不同的用户身份运行,因此我创建了一个powershell脚本来启动MSSQL作为必需的用户。它成功启动程序并向您显示数据库中的表,但是当您打开表或尝试运行查询时,它会出现以下错误:
“Microsoft SQL Server Management Studio - 系统找不到指定的文件。(SQLEditors)”
如果我按正常方式操作(右键单击快捷方式并以其他用户身份运行),它可以正常工作。只有当我从powershell脚本打开它时才会出现问题。
我发现powershell脚本在该帐户登录到节点时有效,但是第二次注销它会再次死亡。我注意到的另一件事是我第一次使用powershell脚本加载MSSQL时,它询问了DB名称,即使它之前通过工作方式保存为最近的连接。这就像它没有找到正确的配置或者其他东西......我在过去的实际项目中使用过这个确切的脚本,所以它已经可以工作了,所以我假设这个问题与MSSQL2005有关。
剧本:
function Get-ScriptDirectory
{
$Invocation = (Get-Variable MyInvocation -Scope 1).Value;
if($Invocation.PSScriptRoot)
{
$Invocation.PSScriptRoot;
}
Elseif($Invocation.MyCommand.Path)
{
Split-Path $Invocation.MyCommand.Path
}
else
{
$Invocation.InvocationName.Substring(0,$Invocation.InvocationName.LastIndexOf("\"));
}
}
$curDir = Get-ScriptDirectory
$encpwd = Get-Content $curDir\password.bin
$passwd = ConvertTo-SecureString $encpwd
$exeLoc = "D:\Program Files\Microsoft SQL Server (x86)\90\Tools\Binn\VSShell\Common7\IDE\SqlWb.exe"
$cred = new-object System.Management.Automation.PSCredential '[username]' , $passwd
Start-Process $exeLoc -Cred $cred
编辑:SveinFidjestøl的评论解决了这个问题。 Start-Process在其末尾需要一个“-LoadUserProfile”。
答案 0 :(得分:1)
许多Windows应用程序和服务都隐含要求必须加载用户配置文件。这似乎是SQL Server 2005的情况。
在PowerShell中,要在调用进程时加载用户配置文件,请将-LoadUserProfile
参数传递给Start-Process
cmdlet。因此,在您的示例中,您将像这样调用SQL Server
Start-Process $exeLoc -Cred $cred -LoadUserProfile