0
## To run the script 
# .\get_status.ps1 -Hostname <host> -Service_Action <action> -Service_Name <name> 

#$Hostname = "hostname" 
#$Service_Action = "Get-Service" 
#$Service_Name = "service_name" 

param(
    [string]$Hostname, 
    [string]$Service_Action, 
    [string]$Service_Name 
) 

$ScriptBlockContent = { 
    param($Service_Action, $Service_Name) 
    & $Service_Action $Service_Name 
    } 

# user credentials 
$Username = "username" 
$Password = "password" 

# To avoid Manual entry of Username and Password 
$Secure_String = convertto-securestring $Password -asplaintext -force 
$User_cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $Username, $Secure_String 

# Create a Session 
$pso = New-PSSessionOption -NoMachineProfile 
$sess = New-PSSession -ComputerName $Hostname -SessionOption $pso -credential $User_cred 

#Run a powershell script in the session. 
Invoke-Command -Session $sess -ScriptBlock $ScriptBlockContent -ArgumentList $Service_Action, $Service_Name 

# Remove session 
Remove-PSSession $sess 

das Skript auszuführen:unerwartetes Token in Ausdruck oder Anweisung - Power

.\<script_name>.ps1 -Hostname <host> -Service_Action <action> -Service_Name <name> 

Für Ex: Service-Aktion ist-Get-Service, Stop-Service Start-Service und Name

dann
Command: Get-Service Servicename 

ich erhalte eine Fehlermeldung: unerwartetes Token in Ausdruck oder Anweisung auf dieser Codezeile:

$ScriptBlockContent = { 
     param($Service_Action, $Service_Name) 
     $Service_Action $Service_Name # here is the error 
     } 
+0

'& $ Service_Action $ Service_Name' – PetSerAl

+0

hinzugefügt. Fehler beim Abrufen: Ein Positionsparameter, der das Argument für $ Service_name akzeptiert, wurde nicht gefunden. –

+0

Bitte vollständige Fehlermeldung anzeigen. – PetSerAl

Antwort

0
## To run the script 
# .\get_status.ps1 -Hostname <host> -Service_Action <action> -Service_Name <name> 

#$Hostname = "hostname" 
#$Service_Action = "Get-Service" 
#$Service_Name = "service_name" 

param(
    [string]$Hostname, 
    [string]$Service_Action, 
    [string]$Service_Name 
) 

$ScriptBlockContent = { 
    param($Service_Action, $Service_Name) 
    & $Service_Action $Service_Name 
    } 

# user credentials 
$Username = "username" 
$Password = "password" 

# To avoid Manual entry of Username and Password 
$Secure_String = convertto-securestring $Password -asplaintext -force 
$User_cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $Username, $Secure_String 

# Create a Session 
$pso = New-PSSessionOption -NoMachineProfile 
$sess = New-PSSession -ComputerName $Hostname -SessionOption $pso -credential $User_cred 

#Run a powershell script in the session. 
Invoke-Command -Session $sess -ScriptBlock $ScriptBlockContent -ArgumentList $Service_Action, $Service_Name 

# Remove session 
Remove-PSSession $sess`enter code here` 
-1

Sie übergeben Ihre Befehle als Zeichenfolgen an Ihre Funktion. Was Sie also syntaktisch mit $Service_Action $Service_Name tun, ist, sich auf zwei String-Objekte in einer Zeile zu beziehen, ohne dass ein Operator sie verbindet. Das ist der Grund für die Ausnahme.

sagen, Powershell, dass Sie eine Zeichenfolge als Befehl ausführen möchten, haben Sie mehrere Möglichkeiten:

Eine Möglichkeit ist, die Befehle als eine einzelne Zeichenfolge an den Invoke-Expression Cmdlets weitergeben müssen:

Invoke-Expression "$Service_Action $Service_Name" 

Alternativ können Sie den Call-Operator & verwenden, der Powershell ebenfalls anweist, einen Befehl als String zu behandeln. In diesem Fall können Sie nicht Cmdlets und Argumente in einer einzigen Zeichenfolge geben, aber in zwei:

& $Service_Action $Service_Name 
+0

Aktualisiertes Skript ... –

Verwandte Themen