首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BAT文件检查PSSnapin是否已注册

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

Stack Overflow用户
提问于 2014-08-05 08:49:37
回答 2查看 147关注 0票数 0

我在这里撞到了一点砖墙。我已经编写了一个相当大的PS脚本,它需要SQLServerProviderSnapin100,这一切都是愉快的。

为了运行脚本,我编写了一个BAT文件,让用户运行,这样他们就不必摆弄execuptionpolicy,所以它会设置它不受限制地调用脚本,并且一旦脚本完成,它就会将executionpolicy设置为受限。

我遇到的问题是,我需要BAT文件来检测用户是否将SqlServerProvider100管理单元注册到32位powershell或64位Powershell。

我知道我可以在powershell中运行这样的程序

代码语言:javascript
复制
$prov = get-pssnapin -registered | where-object{$_.Name -eq "Sqlserverprovidersnapin100"}
if($prov -eq $null){ <call powershell x86>}else{<call powershell 64Bit>}

但我如何在球棒中做到这一点,或者我正在尝试做的事情甚至是可能的呢?

我希望我对一个能帮我渡过难关的人说得通!:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-05 19:18:02

好吧,算了!

代码语言:javascript
复制
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。

票数 0
EN

Stack Overflow用户

发布于 2014-08-05 09:08:23

尝试以下两个命令:

代码语言:javascript
复制
C:\Windows\Syswow64\WindowsPowerShell\v1.0\powershell.exe "if(Get-PSSnapin -registered "SqlServerCmdletSnapin100" -ea 0){ write-host "sql snapin present in 32bit shell"}"

64位:

代码语言:javascript
复制
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "if(Get-PSSnapin -registered "SqlServerCmdletSnapin100" -ea 0){ write-host "sql snapin present in 64bit shell"}"

如果存在sql管理单元,它们将返回一条漂亮的消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25134679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档