最近的开发工作客户提了一个需求,就是希望记录系统的登录时间和登出时间,经过简单的讨论之后,打算使用PowerShell写成脚本挂在组策略上,因此需要这个脚本实现调用制作系统的WebService,具体代码如下:
#使用PowerShell调用WebService的脚本块
#此方法有三个参数
#url(String):要调用的WebService地址
#methodName(String):要调用的WebService方法
#parameters(Object[]):调用WebService方法所需要的参数
function Call-WebserviceMethod($url,$metbodName,$parameters){
$result = @{"ExecuteState" = $true ; "ExecuteMessage" = "" ; "ExecuteResult" = ""};
#生成代理类的命名空间
$namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";
#取URL的最后服务名作为类名
$className = $url.Split(@('/'))[-1].Split(@('.'))[0];
#创建Web客户端
$webClient = New-Object -TypeName System.Net.WebClient;
#读取WSDL
$stream = $webClient.OpenRead($url + "?WSDL");
#创建WebService描述
$serviceDescription = [System.Web.Services.Description.ServiceDescription]::Read($stream);
#生成代理容器
$serviceDescriptionImporter = New-Object -TypeName System.Web.Services.Description.ServiceDescriptionImporter;
#添加描述
$serviceDescriptionImporter.AddServiceDescription($serviceDescription, "", "");
#生成命名空间
$codeNameSpace = New-Object -TypeName System.CodeDom.CodeNamespace -ArgumentList $namespace;
#生成客户端
$codeCompileUnit = New-Object -TypeName System.CodeDom.CodeCompileUnit;
$codeCompileUnit.Namespaces.Add($codeNameSpace);
$serviceDescriptionImporter.Import($codeNameSpace, $codeCompileUnit);
$cSharpCodeProvider = New-Object -TypeName Microsoft.CSharp.CSharpCodeProvider;
#设定编译参数
$compilerParameters = New-Object -TypeName System.CodeDom.Compiler.CompilerParameters;
$compilerParameters.GenerateExecutable = $false;
$compilerParameters.GenerateInMemory = $true;
$compilerParameters.ReferencedAssemblies.Add("System.dll");
$compilerParameters.ReferencedAssemblies.Add("System.XML.dll");
$compilerParameters.ReferencedAssemblies.Add("System.Web.Services.dll");
$compilerParameters.ReferencedAssemblies.Add("System.Data.dll");
#编译代理类
$compilerResults = $cSharpCodeProvider.CompileAssemblyFromDom($compilerParameters,$codeCompileUnit);
if($compilerResults.Errors.HasErrors -eq $false)
{
$assembly = $compilerResults.CompiledAssembly;
$proxyType = $assembly.GetType($namespace + "." + $className, $true, $true);
$proxyObject = [System.Activator]::CreateInstance($proxyType);
$proxyMethod = $proxyType.GetMethod($metbodName);
$result["ExecuteResult"] = $proxyMethod.Invoke($proxyObject,$parameters);
$result["ExecuteMessage"] = "执行WebService方法成功";
}
else
{
$result["ExecuteState"] = $false;
$result["ExecuteMessage"] = "执行WebService方法失败,编译代理类时发生错误";
}
return $result;
}
#调用测试
Call-WebserviceMethod "http://localhost:44596/WebClient/Service.asmx" "SayHello" (@("zhangsan"))
分享到:
相关推荐
Powershell调用入口的优先级.docx
PowerShell调用Google翻译网站的服务,实现英译中翻译,控制台程序,输入英文内容,输出中文信息并复制到剪贴板中。
PowerShell封装了Python for .NET实现从PowerShell调用Python
问题:如何通过PowerShell调用Rate Card API解决方法:获取Authorization Header使用Google Chorme浏览器(其它
java 调用 powershell 并传参 返回
代码精简,简单易上手,独立化部署,完全和现有业务解耦
所以通过调用.Net提供的 System.Windows.Forms 以及 System.Drawing.Graphics 等程序集实现屏幕检测,像素判断 可以实现判断白屏。再通过powershell原生的语法可以启动原神或者浏览器等各种程序 为了保证沉浸式体验...
使用PowerShell调用Power BI REST API的示例。 Microsoft Power BI PowerShell示例 介绍 此存储库包含使用PowerShell调用Power BI REST API的示例。 每个PowerShell脚本都是自记录的。 触发计划的刷新并检查刷新...
之后运行修改后的PowerShell脚本依旧不成功,报错信息如下:Invoke-RestMethod : {"Message":""}At line:21 ch
C#调用powershell脚本的一个例子,很简洁清晰,vs打开项目即可运行。 Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。
Windows PowerShell每周提示
Powershell将信息存储在对象中,每个对象都会有一个具体的类型,简单的文本会以System.String类型存储,日期会以System.DateTime类型存储。任何.NET对象都可以通过GetType()方法返回它的类型,该类型中有一个...
C#开发的控制台程序,C#调用PowerShell执行PowerShell命令。
powershell&bat&vbs三者相互调用.doc
图形API 包含用于使用PowerShell调用Microsoft Graph API的代码
CSharp从Powershell到CS-Onitada 从PowerShell调用C#示例应用程序的代码。 用于在Hatena博客上发布以下文章。 “ [[C#]从PowerShell运行C#应用程序并获得结果[Windows]”
在Java中来调用PowerShell代码 使用jPowerShell.jar包。For example, for Maven you have just to add to your pom.xml: <groupId>com.profesorfalken</groupId> <artifactId>jPowerShell <version>3.1.1...
PowerLessShell依赖MSBuild.exe来远程执行PowerShell脚本和命令不需要调用powershell.exe
在PowerShell中是否有函数?PowerShell是否可以自定义函数?PowerShell中如何自定义函数? 在PowerShell中,我们可以使用函数(function)来简化编程开发。在PowerShell中使用function这个关键词来标识一个函数。一...