【问题标题】:Path SQLSERVER:\7za.exe does not exist?路径 SQLSERVER:\7za.exe 不存在?
【发布时间】:2014-11-19 04:31:17
【问题描述】:

我在 powershell 脚本中有以下代码。我在脚本的同一目录中有文件7za.exe

param($sql)
$temp = [System.IO.Path]::GetTempFileName()
Invoke-Sqlcmd -ServerInstance sqlserver1 $sql | ConvertTo-Csv > $temp
.\7za.exe a '$temp.zip' '$temp'

但是,它得到了以下错误。在invoke-sqlcmd 之后立即在同一文件夹中执行可执行文件的正确方法是什么?

SQL Server PowerShell 提供程序错误:路径 SQLSERVER:\7za.exe 不存在。请指定有效路径。 + CategoryInfo : OperationStopped: (:) [], GenericProviderException + FullyQualifiedErrorId:Microsoft.SqlServer.Management.PowerShell.GenericProviderException + PSComputerName:本地主机

【问题讨论】:

    标签: powershell


    【解决方案1】:

    如果您查看错误消息中的路径,它是“SQLSERVER:\7za.exe”——因此运行此脚本的 PowerShell 实例的当前工作目录(您可以使用自动变量 $pwd 获取) 是 SQLSERVER:\,它是由 SQL 模块\snap-in 创建的 PSDrive,必须加载它才能运行 Invoke-SqlCmd cmdlet。

    默认情况下,PowerShell 脚本不使用其当前位置作为当前工作目录。但是,在 PowerShell 版本 3 及更高版本中,您可以使用自动变量 $PSScriptRoot 获取脚本的目录。在早期版本中,您可以自己生成 $PSScriptRoot:

    $PSScriptRoot = Split-Path -Parent $MyInvocation.MyCommand.Definition
    

    然后你可以像这样在你的脚本中使用这个变量:

    & (Join-Path $PSScriptRoot '7za.exe') "$temp.zip" "$temp"
    

    请注意,我在 $temp 变量周围使用了双引号,以便 PowerShell 自动将变量扩展为正确的名称。

    【讨论】:

      【解决方案2】:

      @jbsmith 关于使用什么路径是正确的。导致此问题的原因是 SQLPS 模块将当前目录更改为 SQLSERVER:当它被导入时。

      【讨论】:

        猜你喜欢
        • 2017-01-21
        • 2020-11-12
        • 1970-01-01
        • 2017-01-20
        • 1970-01-01
        • 2019-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多