如何使用PowerShell将列表传递给WCF服务
本文关键字:WCF 服务 列表 何使用 PowerShell | 更新日期: 2023-09-27 18:27:45
- 我需要建立一个每天发布一次的计划任务,一个日志关于用户会话信息(登录/注销/会话锁定/会话解锁…)。我已经创建了WCF服务、数据库和函数获取论文信息。最后一步是构建PowerShell用于从用户pc发布到服务的脚本,该日志
- 在控制台应用程序中,我使用ConfigItem数据类作为列表,然后将此列表和两个otjers字符串参数传递给服务。我不明白我怎么能在PS脚本中做同样的事情,使用相同的参数并将它们发布到服务中
我的服务方式:
public void RecordActivity(string user, string pc, List<ConfigItem> act)
{
var USR = new Users() { UserName = user };
var PC = new Pc() { PcName = pc };
act.ToList().ForEach(p =>
{
int id = (from t in context.Activity where t.ActivityName==p.Activity select t.ActivityId).SingleOrDefault();
var RF = new AuditActivity() { Date = p.Date,ActivityId=id};
USR.AuditActivity.Add(RF);
PC.AuditActivity.Add(RF);
context.Set<Pc>().Add(PC);
context.Set<Users>().Add(USR);
});
context.SaveChanges();
}
服务中的数据类别:
[DataContract]
public class ConfigItem
{
[DataMember]
public DateTime Date { get; set; }
[DataMember]
public string Activity { get; set; }
}
获取用户信息并在服务中发布的功能(在控制台应用程序中工作)
AuditServiceTestClient sve = new AuditServiceTestClient();
string machine = Environment.MachineName;
string userName = WindowsIdentity.GetCurrent().Name;
List<ConfigItem> cfg = new List<ConfigItem>();
const char fieldSeparator = ';';
string filePath = @"h:'csv'Activity.csv";
using (StreamReader SR = new StreamReader(filePath))
{
while (!SR.EndOfStream)
{
var CSValues = SR.ReadLine().Split(fieldSeparator);
ConfigItem c = new ConfigItem();
c.Date = Convert.ToDateTime(CSValues[0]);
c.Activity = CSValues[1];
cfg.Add(c);
}
}
sve.RecordActivity(userName, machine, cfg);
我的PowerShell脚本:
$WebSvcURL= “http://xxx/AuditServiceTest.svc”
#Create the Web Service Proxy Object
$proxy = New-WebServiceProxy -Uri $WebSvcURL -Namespace ExportTool -Class Program -UseDefaultCredential
$proxy
Write-host -ForegroundColor DarkBlue ===successfullyconnected to the WCF Web Service $proxy
我不确定ConfigItem
来自哪里,所以New-Object
的调用可能不同:
$WebSvcURL = 'http://xxx/AuditServiceTest.svc'
#Create the Web Service Proxy Object
$proxy = New-WebServiceProxy -Uri $WebSvcURL -Namespace ExportTool -Class Program -UseDefaultCredential
# Get machine and user name
$userName = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
$machine = [System.Environment]::MachineName
# Create new list of ConfigItems
$cfg = New-Object -TypeName System.Collections.Generic.List``1[ConfigItem]
# Import CSV, add values to list of ConfigItems
Import-Csv -Path 'h:'csv'Activity.csv' | ForEach-Object {
# Create new ConfigItem
$item = New-Object -TypeName ConfigItem
# Set properties
$item.Date = $_.Date
$item.Activity = $_.Activity
# add item to list
$cfg.Add($item)
}
# Call service method
$proxy.RecordActivity($userName, $machine, $cfg)
参考文献
- Powershell通用集合