我的脚本由于缺少SQLASCmdlets模块而失败。
未加载指定的模块“SQLASCmdlets”,因为无效 模块文件在任何模块目录中找到。
为了运行它,我知道我需要使用
找到的SQLPSGet-Module -ListAvaiable
ModuleType Version Name
---------- ------- ----
Manifest 1.0 SQLPS
我已安装 - SQL Sever 2016 - SQL Management Studio 2017
错误:
VERBOSE: ******************************
VERBOSE: The specified module 'SQLASCmdlets' was not loaded because no valid module file was found in any module directory.
VERBOSE: Errors: 1
VERBOSE: ******************************
VERBOSE: System.IO.FileNotFoundException: The specified module 'SQLASCmdlets' was not loaded because no valid module file was found in any module directory.
VERBOSE: ScriptHalted The specified module 'SQLASCmdlets' was not loaded because no valid module file was found in any module directory.
当我再次重新运行我的脚本时,它可以工作。我如何让它第一次运作?
我使用的代码是:
Import-Module "SQLPS" -DisableNameChecking
$sqlsvr = New-Object -TypeName Microsoft.SQLServer.Management.Smo.Server("WIN-C0BP65U3D4G")
$restore = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Restore
$devicetype = [Microsoft.SqlServer.Management.Smo.DeviceType]::File
$files = gci C:\psbackups
$BackupFiles = @()
foreach ($file in $files){
$restoredevice = New-Object -TypeName Microsoft.SQLServer.Management.Smo.BackupDeviceItem($file.FullName,$devicetype)
$restore.Devices.add($restoredevice)
$errcnt=0
try{
$restore.ReadMediaHeader($sqlsvr)
}
catch [System.Exception]{
Write-Output "$file is not a sql backup file `n"
$errcnt =1
}
finally {
if ($errcnt -ne 1){
Write-Output "$file is a sql backup file `n"
$BackupFiles += $file
}
$errcnt = 0
}
$restore.Devices.remove($restoredevice)
Remove-Variable restoredevice
}
答案 0 :(得分:1)
经过2个小时的研究,我找到了解决方案。
https://www.powershellgallery.com/packages/SqlServer/21.0.17199
2.我已更新我的脚本,以便在安装时选择特定版本
# import modules
if ((Get-Module -ListAvailable | where-object {($_.Name -eq 'SqlServer') -and ($_.Version.Major -gt 20) } |Measure).Count -eq 1){
# implementation of new sql modules migated into new location
Import-Module SqlServer -DisableNameChecking -Verbose
}
else{
# fallback for SQLPS
Import-Module SQLPS -DisableNameChecking -Verbose
}
答案 1 :(得分:0)
是默认情况下未安装SQLPS模块 - 您有两个选项:
1)安装模块 2)安装SSMS - MSSQL管理的标准工具。
此外,如果您安装了32位SSMS,如果运行默认的64位PowerShell或运行32位,则需要显式添加模块。
答案 2 :(得分:0)
SQL 2016和SQL 2017安装中似乎缺少模块SQLASCmdlets。它是关于SQL 2014的,所以我查看了这个模块中的命令,这里是列表:
添加-RoleMember 备份 - ASDatabase 调用-ASCMD 调用-ProcessCube 调用-ProcessDimension 调用-ProcessPartition 合并分区 新RestoreFolder 新RestoreLocation 删除 - RoleMember 还原 - ASDatabase
因此,如果您不需要此模块中的任何这些cmdlet,我们可以通过注释掉尝试加载它的行来阻止显示错误。我使用的是SQL 2017,所以我的文件位置是 C:\ Program Files(x86)\ Microsoft SQL Server \ 140 \ Tools \ PowerShell \ Modules \ SQLPS \ SqlPsPostScript.PS1
一旦你打开它,你会看到它试图加载模块SQLASCmdlets的位置,所以只需注释这一行,你应该是好的。有人需要告诉微软他们忘了带这个模块发布他们的SQL安装包