如何使用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 

如何使用PowerShell将列表传递给WCF服务

我不确定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通用集合