未加载 SQLASCmdlet,因为在任何模块目录中都找不到有效的模块文件
SQLASCmdlets was not loaded because no valid module file was found in any module directory
我有一个脚本由于缺少 SQLASCmdlets 模块而失败。
The specified module 'SQLASCmdlets' was not loaded because no valid
module file was found in any module directory.
为了 运行 我知道我需要 SQLPS,我可以使用
找到它
Get-Module -ListAvaiable
ModuleType Version Name
---------- ------- ----
Manifest 1.0 SQLPS
我已经安装了
- SQL 服务器 2016
- SQL 管理工作室 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
}
经过 2 小时的研究,我找到了解决方案。
- 安装 SqlServer 包
https://www.powershellgallery.com/packages/SqlServer/21.0.17199
2.I 已更新我的脚本以选择特定版本以备安装
# 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
}
- 确保我有新的 PowerShell 会话。
是的,默认情况下未安装 SQLPS 模块 - 您有 2 个选择:
1) 安装模块
2) 安装 SSMS - MSSQL 管理的标准工具。
此外,如果您安装了 32 位 SSMS,如果 运行 默认 64 位 PowerShell 或 运行 32 位,则需要明确添加模块。
SQL2016 和 SQL2017 安装中似乎缺少模块 SQLASCmdlet。它是在 SQL 2014 年所以我查看了这个模块中有哪些命令,下面是列表:
添加角色成员
备份-ASDatabase
调用-ASCmd
调用-ProcessCube
调用过程维度
调用-ProcessPartition
合并分区
新建 RestoreFolder
新的恢复位置
删除角色成员
恢复 ASDatabase
因此,如果您不需要此模块中的任何这些 cmdlet,我们可以通过注释掉试图加载它的行来阻止错误显示。我使用的是 SQL 2017,所以我的文件位置是
C:\Program Files (x86)\Microsoft SQL Server0\Tools\PowerShell\Modules\SQLPS\SqlPsPostScript.PS1
一旦你打开它,你会看到它试图加载模块的位置 SQLASCmdlets 所以只要注释掉这一行就可以了。有人需要告诉 Microsoft 他们忘记将此模块与他们的 SQL 安装包一起运送
我有一个脚本由于缺少 SQLASCmdlets 模块而失败。
The specified module 'SQLASCmdlets' was not loaded because no valid module file was found in any module directory.
为了 运行 我知道我需要 SQLPS,我可以使用
找到它Get-Module -ListAvaiable
ModuleType Version Name
---------- ------- ----
Manifest 1.0 SQLPS
我已经安装了 - SQL 服务器 2016 - SQL 管理工作室 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
}
经过 2 小时的研究,我找到了解决方案。
- 安装 SqlServer 包
https://www.powershellgallery.com/packages/SqlServer/21.0.17199
2.I 已更新我的脚本以选择特定版本以备安装
# 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
}
- 确保我有新的 PowerShell 会话。
是的,默认情况下未安装 SQLPS 模块 - 您有 2 个选择:
1) 安装模块 2) 安装 SSMS - MSSQL 管理的标准工具。
此外,如果您安装了 32 位 SSMS,如果 运行 默认 64 位 PowerShell 或 运行 32 位,则需要明确添加模块。
SQL2016 和 SQL2017 安装中似乎缺少模块 SQLASCmdlet。它是在 SQL 2014 年所以我查看了这个模块中有哪些命令,下面是列表:
添加角色成员 备份-ASDatabase 调用-ASCmd 调用-ProcessCube 调用过程维度 调用-ProcessPartition 合并分区 新建 RestoreFolder 新的恢复位置 删除角色成员 恢复 ASDatabase
因此,如果您不需要此模块中的任何这些 cmdlet,我们可以通过注释掉试图加载它的行来阻止错误显示。我使用的是 SQL 2017,所以我的文件位置是 C:\Program Files (x86)\Microsoft SQL Server0\Tools\PowerShell\Modules\SQLPS\SqlPsPostScript.PS1
一旦你打开它,你会看到它试图加载模块的位置 SQLASCmdlets 所以只要注释掉这一行就可以了。有人需要告诉 Microsoft 他们忘记将此模块与他们的 SQL 安装包一起运送