标签: powershell-remoting

客户拒绝环境中的"脚本".如何在C#应用程序中嵌入*.ps1?

我有以下示例Powershell脚本嵌入在我的C#应用​​程序中.

Powershell代码

    $MeasureProps = "AssociatedItemCount", "ItemCount", "TotalItemSize"

   $Databases = Get-MailboxDatabase -Status
    foreach($Database in $Databases) {

        $AllMBStats = Get-MailboxStatistics -Database $Database.Name    
     $MBItemAssocCount = $AllMBStats   |   %{$_.AssociatedItemCount.value} |  Measure-Object -Average   -Sum
     $MBItemCount =      $AllMBStats   |   %{$_.ItemCount.value} |  Measure-Object -Average  -Sum

        New-Object PSObject -Property @{
            Server = $Database.Server.Name
            DatabaseName = $Database.Name
            ItemCount = $MBItemCount.Sum
        }
    }
Run Code Online (Sandbox Code Playgroud)

Visual Studio为我提供了以下嵌入选项:

在此输入图像描述

我见过的每个PowerShell示例(Exchange上的 MSDN 和MSFT 开发人员中心)都要求我将Powershell命令切换为"位"并通过解析器发送.

我不想在我的应用程序中留下大量PS1文件,我需要一个没有其他"支持"PS1文件的二进制文件.

我怎样才能这样做myapp.exe是我的客户唯一看到的东西?

c# deployment powershell powershell-2.0 powershell-remoting

4
推荐指数
1
解决办法
849
查看次数

具有动态函数名称的Invoke-Command

我找到了这个很棒的帖子:在带参数的函数上使用Invoke-Command -ScriptBlock

我正在尝试使函数call(${function:Foo})动态,因为我想传递函数名称.

我试过这个:

$name = "Foo"
Invoke-Command -ScriptBlock ${function:$name}
Run Code Online (Sandbox Code Playgroud)

但那失败了.我也尝试了各种转义序列,但是不能让函数名称变为动态.


编辑:为了清楚起见,我添加了一个小测试脚本.当然,期望的结果是打电话给ExternalFunction.

Function ExternalFunction()
{
  write-host "I was called externally"
}

Function InternalFunction()
{
    Param ([parameter(Mandatory=$true)][string]$FunctionName)
    #working: Invoke-Command -ScriptBlock ${function:ExternalFunction}
    #not working: Invoke-Command -ScriptBlock ${invoke-expression $FunctionName}
    if (Test-Path Function:\$FunctionName) {
    #working,but how to use it in ScriptBlock?
    }
}

InternalFunction -FunctionName "ExternalFunction"
Run Code Online (Sandbox Code Playgroud)

powershell powershell-remoting

4
推荐指数
1
解决办法
5661
查看次数

在远程计算机上运行本地功能?

我的电脑上有一个简单的功能

MYPC> $txt = "Testy McTesterson"
MYPC> function Do-Stuff($file) { 
  cd c:\temp; 
  $txt > $file; 
}
Run Code Online (Sandbox Code Playgroud)

我想在远程计算机上运行它

MYPC> Invoke-Command -ComputerName OTHERPC { Do-Stuff "test.txt" }
Run Code Online (Sandbox Code Playgroud)

可以理解的是,Do-Stuff在OTHERPC上不存在,这不起作用.我怎么能让它工作呢?该Do-Stuff函数抽象了一些基本代码,并在其他几个地方调用,所以我不想复制它.

请注意,在我的示例中,值通过参数和范围闭包传递给函数.那可能吗?

powershell powershell-remoting

4
推荐指数
2
解决办法
1万
查看次数

从invoke-command进行Powershell日志记录

我有一个包含日志记录功能的脚本.该函数将日志写入$ msg变量,然后将消息写入屏幕.我可以将此输出重定向到.txt文件以进行日志记录.

我需要使用invoke-command将脚本运行到多个服务器,并将日志输出写入运行脚本的计算机上的txt文件.

我试图弄清楚如何从PSSession输出写日志函数中的$ msg并返回它,以便我可以为所有服务器创建一个主日志文件.我应该创建并填充自定义对象吗?不知道如何做到这一点并从远程会话中恢复结果.

甚至可以这样做吗?

以下是我正在使用的代码示例以及日志文件输出应如下所示:

$servers = 'Server1','Server2'
$logfile = 'c:\scripts\logs\Reg-DLL-log.txt'

foreach($server in $servers){
    invoke-command -cn $server -sb{
        Param($server)

        Function write-log{
            [cmdletbinding()]
            Param(
                [Parameter(ValueFromPipeline=$true,Mandatory=$true)] [ValidateNotNullOrEmpty()]
                [string] $Message,
                [Parameter()] [ValidateSet(“Error”, “Warn”, “Info”)]
                [string] $Level = “Info”,
                [Parameter()] [ValidateRange(1,30)]
                [Int16] $Indent = 0
            )
            $msg = "{0} {1}{2}:{3}" -f (Get-Date -Format "yyyy-MM-dd HH:mm:ss"), $Level.ToUpper(), (" " * $Indent), $Message
                #This is output to screen
                switch ($Level) {
                    'Error' { Write-Host ('{0}{1}' -f (" " * $Indent), $Message) -ForegroundColor 'Red'}
                    'Warn' …
Run Code Online (Sandbox Code Playgroud)

powershell powershell-2.0 powershell-remoting

4
推荐指数
1
解决办法
2万
查看次数

Invoke-command -ArgumentList参数语法

我正在尝试将多个csv导入的列表添加到远程执行的PS脚本中.当我使用以下命令仅传递一个列表时,它工作正常:

Invoke-Command -filepath $createSAPSPath -ConnectionUri $uri -Credential $credential -ArgumentList (,$accountsList)
Run Code Online (Sandbox Code Playgroud)

多个列表对象的正确语法是什么?我试过了:

Invoke-Command -filepath $createSAPSPath -ConnectionUri $uri -Credential $credential -ArgumentList (,$accountsList),(,$groupsList)
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用......

谢谢,

格伦

powershell powershell-remoting

4
推荐指数
1
解决办法
5万
查看次数

如何获得使用Powershell在Windows服务器上远程工作的*tmux*体验?

对于Linux服务器上远程工作,我可以sshtmux继续我的工作(包括标准输出/标准错误).

如何使用Powershell在Windows服务器上获得相同的体验?我已经做了一些基本的阅读,Enter-PSSession但感觉就像没有tmux的ssh.

ssh powershell tmux powershell-remoting

4
推荐指数
1
解决办法
2892
查看次数

Enter-PSSession到远程服务器失败,"访问被拒绝"

我想使用winrm remote vm,我可以连接到localhost,但我无法连接到其他远程机器,错误是"访问被拒绝".

请帮我. 在此输入图像描述

powershell powershell-remoting

4
推荐指数
2
解决办法
1万
查看次数

PowerShell 远程处理:控制目标版本(PowerShell Core 或 Windows PowerShell);跨平台远程处理的状态

这个自我回答的问题侧重于 Windows [1],解决了以下几个方面:

现在有两个PowerShell 版本- 传统的、仅限Windows 的 Windows PowerShell跨平台的 PowerShell Core,两者都可以安装在给定的 Windows 机器上:

  • 如何判断哪个 PowerShell 版本将执行远程命令,例如 via Invoke-Command -ComputerName

  • 我如何通过配置针对特定版本,包括临时的持久的

笔记:

对于要在给定机器上通过远程处理可定位的版本,必须将其设置为远程处理

  • 只有Windows PowerShell中自动设置为远程处理,但只能在服务器上运行Windows Server 2012或更高版本。

  • 从 v7 开始,PowerShell Core还没有随 Windows 一起提供;如果您使用的是官方安装程序,则可以选择在安装过程中启用远程处理。

在任何情况下,您都可以根据Enable-PSRemoting需要(重新)启用 PowerShell 远程处理,其中:

  • 必须从相应的版本运行。

  • 必须以管理权限运行


[1] 也就是说,问题集中在基于WinRM的远程处理上(WinRM 是 DTMF …

powershell powershell-remoting winrm wsman powershell-core

4
推荐指数
1
解决办法
1097
查看次数

捕获RPC服务器不可用错误HRESULT:0x800706BA

在powershell中,我可以使用Catch [System.UnauthorizedAccessException]捕获“ Access is Denied”错误。如何类似地捕获RPC服务器不可用错误?

powershell powershell-remoting

3
推荐指数
1
解决办法
2万
查看次数

术语"Add-AzureAccount"未被识别为cmdlet,函数,脚本文件的名称

我试图使用这个天蓝色的命令行程序形式C#应用程序,这是我的天蓝色虚拟机中托管的控制台作业.这个作业自动运行一天一次,但我的azure命令行程无法执行.昨天工作正常,但一天后它无法正常工作,请帮助我.☺

注意:这里我正在做一些管理任务,我正在使用组织帐户.但它无法添加帐户其他命令行程无法正常工作.

c# powershell azure powershell-remoting powershell-3.0

3
推荐指数
1
解决办法
8064
查看次数