レポートw.r.t SQLサーバーをプルするスクリプトを用意していましたが、出力は別のCSVシートにプッシュされます。出力が生成された後、カスタム作成された関数の助けを借りて、すべてのCSVが単一のExcelファイルにマージされ、Excelは自分の電子メールアドレスに送信されます。スクリプトのパワーシェルのカスタム機能
htrough powershell_ise.exeを実行している間、正常に動作しており、正常にメールを受信しています。私は同じスクリプトをスケジュールしたとき、私は電子メールを受信していますが、外付けの添付ファイルはありません。私は、カスタムの作成された関数が使用されていないと思っています。変換されたExcelファイルが必要な場所に表示されないためです。
ドットソーシングのように、スクリプト自体に機能を貼り付けてみましたが、運はありませんでした。
私はpowershellの初心者です。もし私が何かを逃しているなら、私は何か助けてください。
おかげで、 アニル
Function Merge-CSVFiles
{
Param(
$CSVPath = "D:\Anil\Missing_Indexes", ## Soruce CSV Folder
$XLOutput="D:\Anil\Missing_Indexes.xls" ## Output file name
)
$csvFiles = Get-ChildItem ("$CSVPath\*") -Include *.csv
$Excel = New-Object -ComObject excel.application
$Excel.visible = $false
$Excel.sheetsInNewWorkbook = $csvFiles.Count
$workbooks = $excel.Workbooks.Add()
$CSVSheet = 1
Foreach ($CSV in $Csvfiles)
{
$worksheets = $workbooks.worksheets
$CSVFullPath = $CSV.FullName
$SheetName = ($CSV.name -split "\.")[0]
$worksheet = $worksheets.Item($CSVSheet)
$worksheet.Name = $SheetName
$TxtConnector = ("TEXT;" + $CSVFullPath)
$CellRef = $worksheet.Range("A1")
$Connector = $worksheet.QueryTables.add($TxtConnector,$CellRef)
$worksheet.QueryTables.item($Connector.name).TextFileCommaDelimiter = $True
$worksheet.QueryTables.item($Connector.name).TextFileParseType = 1
$worksheet.QueryTables.item($Connector.name).Refresh()
$worksheet.QueryTables.item($Connector.name).delete()
$worksheet.UsedRange.EntireColumn.AutoFit()
$CSVSheet++
}
$workbooks.SaveAs($XLOutput,51)
$workbooks.Saved = $true
$workbooks.Close()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbooks) | Out-Null
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
}
Excelと対話する機能と、スケジュールされたタスクをどのように設定したか(どのアカウントが実行されているか、どの設定がタスクにあるかなど)詳細については、 –
@ MathiasR.Jessenは言った。しかし、私はあなたの機能がスクリプトで定義される前に単純に参照されていると思う。関数が参照される前に、関数がスコープで定義されていることを確認してください。 –
@JacobColvin悪い推測ではなく、古典的なpowershell_ise落とし穴です;-) –