小编ddr*_*man的帖子

使用 SMO 运行 PowerShell 脚本时缺少程序集

我编写了一个脚本,该脚本以数据库名称、恢复的数据库名称、备份源、数据文件位置和日志文件位置为参数,并在 SQL Server 实例上执行数据库恢复。当从 PowerShell ISE 运行时,脚本工作正常,但是当从 PowerShell 控制台运行时,它会抛出缺少程序集错误,或者当以 CmdExec 或 PowerShell 类型通过 SQL 代理作业运行时出现错误时,术语未被识别为 cmdle 的名称。

我试图在脚本中使用 Add-Type 添加程序集的路径,但没有名为 Microsoft.SqlServer.Management.Smo.Server、Microsoft.SqlServer.Management.Smo.Restore... 等的程序集。

作为 PS newb,我没有想法。任何建议,如何解决这个问题以便能够在 SQL 代理作业步骤中运行这个脚本?

我正在使用命令在 ISE 和控制台中执行脚本

.\RestoreDB_Script.ps1 -DatabaseName TestDB -NewDatabaseName TestDB_new -SourceDir V:\Backup -DataDir D:\Data -LogDir L:\Log
Run Code Online (Sandbox Code Playgroud)

在 SQL 代理作业中执行脚本

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile  -ExecutionPolicy Bypass -Command C:\Script\RestoreDB_Script.ps1 -DatabaseName TestDB -NewDatabaseName TestDB_new -SourceDir V:\Backup -DataDir D:\Data -LogDir L:\Log
Run Code Online (Sandbox Code Playgroud)

脚本

Param(
    [parameter(Mandatory=$true)]
    [String]
    $DatabaseName,
    [parameter(Mandatory=$true)]
    [String]
    $NewDatabaseName,
    [parameter(Mandatory=$true)]
    [String]
    $SourceDir,
    [parameter(Mandatory=$true)]
    [String]
    $DataDir,
    [parameter(Mandatory=$true)]
    [String]
    $LogDir)

$file = $DatabaseName+".bak" …
Run Code Online (Sandbox Code Playgroud)

powershell smo sql-server-agent windows-server sql-server-2016

3
推荐指数
1
解决办法
8959
查看次数