我在 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/