使用BAT文件检查PSSnapin是否注册



我遇到了一点困难。我写了一个相当大的PS脚本,需要SQLServerProviderSnapin100,这一切都工作愉快。

为了运行脚本,我为用户编写了一个BAT文件,以便他们不必摆弄执行策略,因此它将其设置为无限制调用脚本,一旦脚本完成,它将执行策略设置为受限。

我遇到的问题是,我需要BAT文件来检测用户是否有SqlServerProvider100 snapin注册到32位Powershell或64位Powershell。

我知道我可以在powershell中运行这样的东西

$prov = get-pssnapin -registered | where-object{$_.Name -eq "Sqlserverprovidersnapin100"}
if($prov -eq $null){ <call powershell x86>}else{<call powershell 64Bit>}

但是我如何在BAT中做到这一点,或者我想做的是可能的吗?

我希望我对那些能帮助我克服这个障碍的人有意义!:)

试试下面两个命令:

C:WindowsSyswow64WindowsPowerShellv1.0powershell.exe "if(Get-PSSnapin -registered "SqlServerCmdletSnapin100" -ea 0){ write-host "sql snapin present in 32bit shell"}"
对64位:

C:WindowsSystem32WindowsPowerShellv1.0powershell.exe "if(Get-PSSnapin -registered "SqlServerCmdletSnapin100" -ea 0){ write-host "sql snapin present in 64bit shell"}"

如果sql snapin存在,它们将返回一个漂亮的消息。

算出来了!

FOR /F "usebackq delims=" %%i IN (`powershell -command "get-pssnapin -registered | where-object { $_.Name -eq 'sqlserverprovidersnapin100' }"`) DO ( set snapin=%%i )
REM if /i {%snapin:~0,4%}=={%test:~0,4%} (goto :there)
if not defined snapin goto :notthere
(goto :there)
:there
echo %snapin%
pause
exit
:notthere
echo "Not loaded!"
pause
exit

这个练习现在教会了我两件事:显然,当我在BAT中测试NULL时,如果值为NULL,它将删除变量,其次如何将PS变量传递回BAT。

相关内容

  • 没有找到相关文章

最新更新