1

我在 StackOverflow 的另一篇文章中发现了一个脚本,它看起来就像我需要的那样,但是,当我尝试在 SSMS 中从 PowerShell 执行 .ps1 文件类型时出现错误。

环境是 SQL Server 2014。

我的 FindBrokenObjectsInSQLServer.ps1 文件定义为:

$server = "APPDEV2014"
cls
Import-Module "sqlps" -DisableNameChecking

$databases = Invoke-Sqlcmd -Query "select name from sys.databases where name not in ('master', 'tempdb', 'model', 'msdb')" -ServerInstance $server
foreach ($db in $databases) {
    $dbName = $db.name
    $procedures = Invoke-Sqlcmd -Query "select SCHEMA_NAME(schema_id) as [schema], name from $dbName.sys.procedures" -ServerInstance $server
    foreach ($proc in $procedures) {
        if ($schema) {
            $shortName = $proc.schema + "." + $proc.name
            $procName =  $db.name + "." + $shortName
            try {
                $result = Invoke-Sqlcmd -Database $dbName -Query "sys.sp_refreshsqlmodule '$shortName'" -ServerInstance $server -ErrorAction Stop
                Write-Host "SUCCESS|$procName"
            }
            catch {
                $msg = $_.Exception.Message.Replace([Environment]::NewLine, ",")
                Write-Host "FAILED|$procName|$msg" -ForegroundColor Yellow
            }
        }
    }
}

我正在执行的命令是:

PS SQLSERVER:\SQL\APPDEV2014\DEFAULT> PowerShell -command 
"H:\SQLScripts\FindBrokenObjectsInSQLServer.ps1"

最后我得到的错误是:

Import-Module : A positional parameter cannot be found that accepts argument
'?'.
At H:\SQLScripts\FindBrokenObjectsInSQLServer.ps1:3 char:1
+ Import-Module "sqlps"? -DisableNameChecking
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Import-Module], ParameterB
   indingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell
   .Commands.ImportModuleCommand

任何建议/方向将不胜感激。这是我第一次尝试使用 PowerShell。谢谢。

4

2 回答 2

1

检查您是否正确保存了脚本。包含 的行上似乎有一个额外的问号Import-Module。仔细查看它抱怨的行:

+ Import-Module "sqlps"? -DisableNameChecking

"sqlps"注意到参数后面的额外问号了吗?删除它。

于 2016-03-26T14:14:19.003 回答
0

您正在尝试导入一个很可能在您的计算机上不存在的模块,因为它是 SQL Server 2016 的原生模块,但不是 SQL Server 2014 的原生模块。

您可能需要安装 SQL Server 2014 Feature Pack SP1,可在此处找到: https ://www.microsoft.com/en-us/download/details.aspx?id=46696

尝试执行以下操作时会发生相同的错误

Import-Module ActiveDirectory

在 Windows 功能下未安装和启用 RSAT 工具时。

于 2016-03-24T23:15:40.663 回答