【发布时间】:2018-11-09 01:12:59
【问题描述】:
我有一个 PowerShell 脚本,它在 PowerShell 脚本中执行一个 SQL 文件(包含将数据从 XML 文件导出到 SQL Server 数据库表的命令):
Function Export-Data
{
$srvrInst = $env:COMPUTERNAME;
$db = "DataModel.PAModel";
$apc = "C:\DCT\SQL\AccountingPeriodCases.sql";
Invoke-Sqlcmd -InputFile $apc -ServerInstance $srvrInst -Database $db;
}
Export-Data;
我需要从 WPF-C# 代码调用这个 Smpl.ps1 文件。 也就是当数据导出对应的checkbox被勾选时,那么这个Smpl.ps1应该会被调用并执行。
所以我有 C# 代码 sn-p:
int DataBox_Execute()
{
Runspace rs = RunspaceFactory.CreateRunspace();
rs.ThreadOptions = PSThreadOptions.UseCurrentThread;
rs.Open();
int k = 0;
PowerShell ps = PowerShell.Create();
if (DataBox.IsChecked ?? true)
{
ps.Runspace = rs;
ps.AddScript(@"C:\DCT\LogCapture\Smpl.ps1").Invoke();
k = 1;
}
rs.Close();
return k;
}
但我不明白为什么它没有被执行。当我回去检查 SQL Server 数据库时,应该有数据的表是空的。
我确定脚本工作正常,因为当我尝试仅通过 PowerShell 执行脚本时,SQL 数据库表显示为满,其中包含我希望它工作的 xml 文件中的导出值。
所以我想知道 WPF-C# 中的程序部分是否有任何问题。 任何人都可以请帮助伙计们吗?
【问题讨论】:
-
AddScript 希望您传递脚本的实际内容,而不仅仅是磁盘上文件的路径。
-
那么有没有其他方法可以传递脚本文件? @boxdog
-
您可以尝试使用
Get-Content阅读脚本并传递它。 -
@boxdog:据此:msdn.microsoft.com/en-us/library/dn614674(v=vs.85).aspx AddScript 确实需要脚本的路径。
-
@PalleDue,我不相信文档是准确的。例如,我刚刚意识到我最初链接的页面有使用
AddScript的示例,但实际上并没有使用该方法!我 100% 确定的一件事是传递可执行代码的 sn-p 确实有效,因为我已经多次使用该技术。它可能接受路径或sn-p,但它似乎很糟糕,它不允许用户明确说明他们使用的是哪个(例如使用IsScriptPath标志或类似标志),因此让方法通过解析输入来“猜测”。
标签: c# sql-server wpf powershell