我有以下脚本:
@
我已将此功能作为模块安装。当我从例如桌面文件夹中调用命令时,如下所示:
SELECT
RES.[name], RES.[date], MIN(RES.[record]) AS [r1], MAX(RES.[record]) AS [r2]
FROM
(
SELECT
K.[record]-dense_rank() over(partition by K.[name], K.[date] order by K.[record]) AS X, K.*
FROM
TABLE K
) RES
GROUP BY RES.[name], RES.[date], RES.X
我收到以下错误(export.txt文件在桌面文件夹中):
function Export-sql-toExcel {
[CmdletBinding()]
Param (
[string]$scriptFile,
[string]$excelFile,
[string]$serverInstance,
[string]$database,
[string]$userName,
[string]$password
)
$tokens = ( [system.io.file]::ReadAllText( $scriptFile ) -split '(?:\bGO\b)' )
foreach ($token in $tokens) {
$token = $token.Trim()
if ($token -ne "") {
$lines = $token -split '\n'
$title = $lines[0]
if ($title.StartsWith("--")) {
$title = $title.Substring(2)
$title
}
Invoke-Sqlcmd -ServerInstance $serverInstance -Database $database -Username $userName -Password $password -Query $token |
Export-Excel -Path $excelFile -WorkSheetname $title -FreezeTopRow -ExcludeProperty RowError,RowState,Table,ItemArray,HasErrors
}
}
}
已编辑
如果我调试并尝试[system.environment] :: CurrentDirectory,它将返回
PS D:\Usuarios\mnieto\Desktop> Export-sql-toExcel -scriptFile .\EXPORT.txt -excelFile Excel.xlsx
那是因为我的脚本失败了。 NET功能和Powershell不共享“当前目录”
还有其他获取内容并解析$ scriptFile文件的方法吗?
答案 0 :(得分:1)
我在这一行得到了通过powershell命令更改NET调用的解决方案
$content = Get-Content $scriptFile -Raw
$tokens = ( $content -split '(?:\bGO\b)' )
诀窍在-Raw参数中,因此文件被读取为单个字符串
答案 1 :(得分:1)
以我的经验,.dot NET函数不喜欢相对路径。
我会使用
$scriptfile = (Get-Item $Scriptfile).FullName
解析为前面函数中的完整路径:
$tokens = ( [system.io.file]::ReadAllText( $scriptFile ) -split '(?:\bGO\b)' )
答案 2 :(得分:0)
我也遇到同样的情况,当我添加点“”时,它已解决。调用csv
$ path2 = $ path +“。\ file.csv”
或在$ excelFile变量中检查空格。