powershell - 路径 SQLSERVER :\7za. exe 不存在?

标签 powershell

我在 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:本地主机

最佳答案

如果您查看错误消息中的路径,它是“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 会自动将该变量扩展为正确的名称。

关于powershell - 路径 SQLSERVER :\7za. exe 不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27001958/

相关文章:

powershell - 下载文件,获取状态,然后执行文件

powershell - 似乎无法将通用集合与PowerShell类一起使用

powershell - 如何从 $env :PSModulePath for PowerShell? 永久删除 UNC 路径

powershell - 如何重新定义由 powershell 模块导出的函数

regex - PowerShell -replace 获取两个不同字符之间的字符串

json - 在Powershell中过滤JSON

xml - 为PowerShell脚本异常的结果添加颜色

json - 使用 PowerShell for Packer 编辑 JSON

powershell - 获取格式化的通用日期/时间

powershell - 确定 Powershell 中不同时区的夏令时状态