2017-11-28 15 views
0

ローカルユーザを使用してWindowsサーバにログインし、Active Directoryユーザを使用してネットワークドライブをマップし、Ansibleで自動化されたインストーラを実行します。可能なWindows共有からインストーラを実行する

私はthis questionの提案に従って、PowerShellスクリプトを作成し、マウントとインストールを行いました。

param(
    $map_user, 
    $map_password, 
    $script 
) 
$PWord="$map_password"|ConvertTo-SecureString -AsPlainText -Force 
$myCreds=New-Object System.Management.Automation.PsCredential($map_user,$PWord) 
New-PSDrive -Name "Z" -PSProvider "FileSystem" -Root "\\domain\share" -Credential $myCreds 
echo Invoke-Command -ScriptBlock $script 

そして、私はエラーを取得する:

在庫:

[winserver] 
windows 

[winserver:vars] 
ansible_user="local_user" 
ansible_password="[email protected]" 
ansible_connection="winrm" 
ansible_winrm_cert_validation=ignore 
win_user="domain\aduser" 
win_pass="[email protected]" 

タスクYAML:

--- 
    - name: Mount and run a script 
    script: 'files/maprun.ps1 -map_user {{ win_user }} -map_password {{ win_pass }} -script z:\ascript.ps1' 

そしてmaprun.ps1スクリプトは、次のものが含まれ、次のように私は、そのスクリプトを使用しました:

New-PSDrive: A specified logon session does not exist. It may already have 
been terminated 

ほとんどのヒットはダブルホップの問題ですが、リモートスクリプトでは異なる資格情報を指定しようとしています。したがって、これはダブルホップの問題ではありません。もう1つの答えは、これが可能であるべきだと示唆している。スクリプトはインタラクティブモードで動作するので、バッチモードであることと関係しています。どのように私はこれを動作させることができます任意のアイデア?

私はRed Hat Enterprise LinuxでAnsible 2.3.1.0を使用しています。 WindowsはWindows Server 2012 R2です。スクリプトは手作業で入力されました。

+0

ユーザ名またはパスワードがスペースやその他を含む任意のチャンス特殊文字、および何とか引用符が必要ですか? "〜map_user"} "-map_password" {{win_pass}} "' – TessellatingHeckler

+0

私は実際にその行全体を引用していました(それを反映するように変更しました)。パスワードを間違ったパスワードに変更すると、別のエラーが表示されるので、パスワードはOKです: 'New-PSDrive:指定されたネットワークパスワードが正しくありません。 ' –

答えて

-2

私はいくつかの提案をすることができます。

  1. あなたが書いたように、スクリプト "maprun.ps1"はLinuxコントローラマシンの "files"ディレクトリに保存する必要があります。そうであれば、 "maprun.ps1"スクリプトがリモートホストにコピーされ、実行され、削除されます。 "maprun.ps1"が "ascript.ps1"を呼び出す場合は、 "maprun.ps1"を呼び出す前に "ascript.ps1"をリモートホストにコピーし、 "maprun.ps1"のコンテキストでその位置を定義する必要があります。 。
  2. あなたのプレイブック "script:"コマンドの引数の前にパラメータ名は必要ありません。
  3. 危険なプレイブックの内部には、中括弧と二重引用符が必要です。
  4. New-PSDriveコマンドでネットワークドライブに接続する代わりに、以下のように "net use"コマンドを試すこともできます。

ので、代わりの

script: 'files/maprun.ps1 -map_user {{ win_user }} -map_password {{ win_pass }} -script z:\ascript.ps1' 

maprun.ps1には、以下が含まれてい
script: files/maprun.ps1 "Z:" "{{ win_user }}" "{{ win_pass }}" "z:\ascript.ps1" 

をお試しください...

# connect to a shared resource and run script 
param(
    [string]$map_server,  
    [string]$map_user, 
    [string]$map_password, 
    [string]$script  
) 
# connect to the network drive 
net use $map_server $map_password /USER:$map_user 
Invoke-Item (start powershell ((Split-Path $MyInvocation.InvocationName) + $script)) 
net use $uncServer /delete 
+0

1.はい、maprunはファイルに保存されます。代理人私はドライブzとしてマップしようとしている共有にps1があります。これは私のポストのポイントですが動作しません。 –

+0

2.スクリプトはテストされ、機能します。 3.パラメータをエコーアウトしようとしましたが、この場合正しくパスされています。私は様々な引用オプションを試しました。 4.ネット使用時にエラーが発生する 指定されたユーザーコンテキストが無効です –

関連する問題