goo*_*ate 19 c# powershell cmdlets powershell-remoting runspace
我知道连接到远程运行空间的唯一方法包括以下参数
WSManConnectionInfo connectionInfo =
new WSManConnectionInfo(false, "localhost", 80, "/Powershell", "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credential);
Run Code Online (Sandbox Code Playgroud)
要么
WSManConnectionInfo connectionInfo =
new WSManConnectionInfo(false, "localhost", 5985, "/wsman", "http://schemas.microsoft.com/powershell/Microsoft.Powershell", credential);
Run Code Online (Sandbox Code Playgroud)
如何设置我自己的自定义Powershell对象,以便通过HTTP公开它?
使用的正确参数是什么以及如何设置它们?
bri*_*ist 20
这有几个部分,所以我将分别解释它们然后将它们组合在一起.
Exchange正在使用Implicit Remoting.
它的工作方式是为远程机器建立PSSession,然后将远程实例提供的一些命令导入到您自己的命令中.
这是使用Import-Module -Session $session
或完成的Import-PSSession
.
你可以在Powershell中为自己尝试这个.使用未安装Active Directory RSAT的工作站(没有ActiveDirectory powershell cmdlet),然后连接到执行的计算机(让我们调用它DC1
):
$s = New-PSSession -ComputerName DC1
Invoke-Command -Session $s -ScriptBlock { Import-Module ActiveDirectory }
Import-PSSession -Session $s -Module ActiveDirectory
Run Code Online (Sandbox Code Playgroud)
将调用限制Import-PSSession
为仅一个模块允许您仅导入这些cmdlet.此时,您将能够执行Get-ADComputer
,例如,就好像它在本地可用,即使正在进行实际调用DC1
.
进行PowerShell远程连接时,您将连接到会话配置.如果您未指定一个,则连接到一个名为Microsoft.PowerShell
.要查看计算机上定义的所有配置,请致电Get-PSSessionConfiguration
.您可能会看到其他一些,例如,Microsoft.PowerShell32
是一种连接到32位PowerShell会话的方法.
要连接到特定配置,请使用New-PSSession -ConfigurationName
或New-PSSession -ConnectionUri
.
您可以在会话配置中指定很多内容; powershell的版本,位数,预先导入的模块,您可以预先定义函数和代码,可以防止语言功能可用等.
您还可以将配置信息放在程序集中,这对于您尝试执行的操作非常有用.
正如您所见,Import-PSSession
如果它存在于模块中,则更容易导入您想要的代码.因此,您应确保通过模块公开cmdlet.
您在评论中说过要在C#中编写cmdlet.这不是我所做的,但本文似乎提供了有关如何在C#中创建PowerShell模块的详细说明.
这是我现在做的事情(那篇文章很好).在C#中编写cmdlet隐含地已经是一个模块.实际上,您可以使用它Import-Module
来加载已编译的.NET程序集,无论它是否包含任何PowerShell cmdlet.
例如,如果您创建了一个公共类并将其编译为DLL,那么您可以Import-Module MyAssembly.dll
在PowerShell会话中使用该类.
在C#中定义cmdlet意味着包括对System.management.Automation
from Cmdlet
或from继承的类的引用,然后创建一个继承自或的类PSCmdlet
.
建议定义模块清单,但在技术上是可选的,就像使用脚本模块一样.
然而,我没有在程序集中包含会话配置信息(但是?),也没有看到如何执行此操作的参考.
步骤应该大致类似于:
-AssembliesToLoad
或者-ModulesToImport
(或两者都必要),或者在程序集本身中指定配置信息(这里可能是首选). $s = New-PSSession -ComputerName RemoteMachine -ConfigurationName MyConfig
# The configuration was defined in such a way
# that your module will already be imported in the remote session.
Import-PSSession -Module MyModule
Run Code Online (Sandbox Code Playgroud)
你不必须建立在远程端自定义配置.只要您的模块可用于远程计算机上的任何PowerShell会话,您就可以跳过会话配置步骤,然后您将执行以下操作:
$s = New-PSSession -ComputerName RemoteMachine
Invoke-Command -Session $s -ScriptBlock { Import-Module MyModule }
Import-PSSession -Session $s -Module MyModule
Run Code Online (Sandbox Code Playgroud)
但是您可能希望使用会话配置进行额外的自定义和控制,这取决于您.这就是交换的方式,但对你的目的而言可能有点过分.
归档时间: |
|
查看次数: |
2867 次 |
最近记录: |