0

私は PowerShell の初心者であり、さまざまなサイトの助けを借りてこれを回避するのに苦労しています。私の要件とシナリオは

PowerShellがインストールされたWindowsサーバー2008(rktdepy)があり、アプリケーションを.cmdファイルにパッケージ化しました。この.cmdファイルをクリックすると、アプリケーションがデプロイされます。

サーバー名はrktdepy、ネットワーク内の他のサーバーに接続する PowerShell スクリプトを作成し (サーバー名は txt ファイルから取得する必要があります)、 rktdepyサーバーからリモートでファイルにアクセスするアプリケーションをインストールしたいと考えています。ファイルはどのサーバーにもコピーされることは想定されておらず、セキュリティ上の理由から psxec を使用しないでください。

これまでのところ、ネットワークドライブの呼び出しとマッピングを使用しましたが、まだ問題があります

$Comsession = Get-content c:\adminfiles\scripts\deploy.txt | new-pssession -throttlelimit 50
Invoke-command -computername RKTDEPLY54 -scriptblock { (new-object -comobject wscript.network).mapnetworkdrive("R:", "\\rktdepy\deploy", $true) }
Invoke-command -session $comsession -scriptblock {"CMD /C r:\QR_DEPLOY.CMD"}

上記のスクリプトはエラーをスローします。

スクリプトでパスワードを使用したくないので、現在ログインしているユーザーのパスワードをrktdepyサーバーから取得する必要があります。スクリプトが、すべてのサーバーへの管理者アクセス権を持つユーザー名とパスワードを求めるプロンプトを出しても問題ありません。

4

2 に答える 2

0

私は自分のマシンで以下をテストしており、これまでのところ動作しています。以下にリストされている別の方法を試すこともできます。

Method1:
1. という名前のコンピューターのリストを含む txt ファイルがありますallcomputers.txt。各行のマシンの名前が含まれています。

Machine10  
Machine20  
Machine30  
Machine40  
  1. mydeploytest.ps1コンピューター名、ユーザー名、およびパスワードを入力として受け取り、新しい PSSession を作成してからコマンドを呼び出す 展開スクリプト ( )。

    param(
    [文字列]$コンピュータ名、
    [文字列]$ユーザー、
    [文字列]$パス
    )
    Get-PSSEssion | Remove-PSSession
    $session = New-PSSession -ComputerName $ComputerName
    Invoke-Command -Session $session -ScriptBlock {
    param(
    [string]$ComputerName,
    [string]$Username,
    [string]$Password
    )
    $net = new-object - ComObject WScript.Network
    $net.MapNetworkDrive("U:", "\\RKTDEPY\deploy", $false, $Username, $Password)
    Invoke-Expression "CMD /CU:\deploy.cmd"
    $net.RemoveNetworkDrive(" U:")
    } -args $ComputerName,$User,$pass
    Get-PSSEssion | 削除-PSSession

  2. デプロイ タスクを実行するための Powershell コマンドライン ワンライン。

PS C:> Get-Content C:\scripts\allcomputers.txt | Foreach { C:\scripts\mydeploytest.ps1 $_ "yourserviceaccount" "password"}

Method2:
Invoke-Command のヘルプ メソッドには、回答で言及されているダブルホップの問題を解決する方法の例があります。

PS C:\> Enable-WSManCredSSP -Delegate Server02
 PS C:\>Connect-WSMan Server02
 PS C:\>Set-Item WSMan:\Server02*\Service\Auth\CredSSP -Value $true
 PS C:\>$s = New-PSSession Server02
 PS C:\>Invoke-Command -Session $s -ScriptBlock {Get-Item \\Net03\Scripts\LogFiles.ps1} -Authentication CredSSP
 -Credential Domain01\Admin01

方法 2 を少し変更するだけで、目的を達成できると思います。

于 2013-08-21T15:45:43.787 に答える