Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

PowerShell Script starten mit externen CMDlets

Frage Entwicklung

Mitglied: Raducanu

Raducanu (Level 1) - Jetzt verbinden

23.11.2011 um 11:42 Uhr, 6338 Aufrufe, 1 Kommentar

Guten Tag,

ich bin absolute unerfahren was PowerShell betrifft, muß aber ein Problem lösen.
Hier hoffe ich auch eure Hilfe.

Problem:

Software welches eigene CMDlets mitbringt (DataCore SANsymphony-V). Diese CMDlets sollen aus einer Batchfile genutzt werden (werden aus einem Program angestartet welches nur *.bat oder *.exe Dateien ausführen kann -> APC PowerChute Network Shutdown)

Wenn ich die Powershell der Software starte (powershell.exe mit .ps1 Konfigscript zum registrieren der CMDlets) und dort die Befehle bzw meine *.ps1 ausführe funktioniert alles wunderbar.
01.
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe  -c ". \"C:\Program Files\DataCore\SANsymphony\Register-DcsCmdlets.ps1\""
Die Register-DcsCmdlets.ps1 sieht wie folgt aus:

01.
param([ScriptBlock]$scriptBlock, [switch]$forceExit, [string[]]$params) 
02.
 
03.
$configurationPath = $Env:TEMP | Join-Path -ChildPath ([Guid]::NewGuid()) 
04.
New-Item -Path $configurationPath -ItemType Container > $null 
05.
@" 
06.
<?xml version="1.0" encoding="utf-8" ?> 
07.
<configuration> 
08.
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
09.
        <supportedRuntime version="v4.0"/> 
10.
        <supportedRuntime version="v2.0.50727" /> 
11.
    </startup> 
12.
</configuration> 
13.
"@ | Set-Content -Path $configurationPath\powershell.exe.activation_config -Encoding UTF8 
14.
 
15.
$envVariableName = 'COMPLUS_ApplicationMigrationRuntimeActivationConfigPath' 
16.
$envVariableOld = [Environment]::GetEnvironmentVariable($envVariableName) 
17.
[Environment]::SetEnvironmentVariable($envVariableName, $configurationPath) 
18.
 
19.
$importCmdletBlock = {  
20.
	$bpKey = 'BaseProductKey' 
21.
    	$regKey = get-Item "HKLM:\Software\DataCore\Executive" 
22.
    	$strProductKey = $regKey.getValue($bpKey) 
23.
    	$regKey = get-Item "HKLM:\$strProductKey" 
24.
    	$installPath = $regKey.getValue('InstallPath') 
25.
	 
26.
	Import-Module "$installPath\DataCore.Executive.Cmdlets.dll" -DisableNameChecking -ErrorAction Stop 
27.
	Write-Host "Successfully registered SANsymphony-V Cmdlets for Windows PowerShell." 
28.
29.
 
30.
try 
31.
32.
    Cls 
33.
34.
catch 
35.
36.
    # Nothing to do. This will throw an exception only when it is called 
37.
    # without a console. 
38.
39.
 
40.
try 
41.
42.
	if ($scriptBlock -ne $null) 
43.
44.
		$finalBlockString = $importCmdletBlock.ToString() + "`n" + $scriptBlock.ToString() 
45.
		$finalBlock = [scriptblock]::Create($finalBlockString) 
46.
 
47.
		if ($forceExit) 
48.
		{ & powershell.exe -Command $finalBlock -args $params} 
49.
		else 
50.
		{ & powershell.exe -NoExit -Command $finalBlock -args $params } 
51.
52.
	else 
53.
54.
		& powershell.exe -Command $importCmdletBlock -NoExit 
55.
56.
57.
finally 
58.
59.
    [Environment]::SetEnvironmentVariable($envVariableName, $envVariableOld) 
60.
    $configurationPath | Remove-Item -Recurse 
61.
}
Nur wie führe ich meine *.ps1 Datei aus einer *.bat Datei aus, so dass auch die CMDlets der Software zur Verfügung stehen?
Meine *.ps1 Datei
01.
#Konfiguration 
02.
$server="SSY-V-01" 
03.
$username="Administrator" 
04.
$password="test123!" 
05.
 
06.
 
07.
Connect-DcsServer -Server $server -UserName $username -Password $password -Connection $server 
08.
Disable-DcsServerWriteCache -Server $server -Connection $server
Mitglied: Raducanu
23.11.2011 um 15:13 Uhr
Ich bin etwas weiter gekommen:

Mit

01.
#Konfiguration 
02.
$server="SSY-V-01" 
03.
$username="Administrator" 
04.
$password="test123!" 
05.
 
06.
Import-Module 'C:\Program Files\DataCore\SANsymphony\DataCore.Executive.Cmdlets.dll" 
07.
Connect-DcsServer -Server $server -UserName $username -Password $password -Connection $server 
08.
Disable-DcsServerWriteCache -Server $server -Connection $server
Startet zumindest eine PS mit DataCore CMDlets.
Nur die Befehle Connect-DcsServer und Disable-DcsServerWriteCache werden erst ausgeführt wenn ich mit "exit" die DataCore CMDlet Ebende wieder verlasse.
Bitte warten ..
Ähnliche Inhalte
Entwicklung
gelöst Powershell Script: In Forest nach Computernamen suchen (13)

Frage von Agilolfinger zum Thema Entwicklung ...

Batch & Shell
PowerShell-Script zum Prüfen ob Datei(en) existieren (2)

Frage von Bonsai0815 zum Thema Batch & Shell ...

Microsoft
PowerShell Script auf Domänen-Rechnern ausführen (3)

Frage von Hoerli zum Thema Microsoft ...

Neue Wissensbeiträge
Heiß diskutierte Inhalte
Viren und Trojaner
Ransomware .nm4 (14)

Frage von Zyklo92 zum Thema Viren und Trojaner ...

iOS
16 iPads zentrall verwalten (14)

Frage von simonlohr zum Thema iOS ...

Microsoft Office
+1.000 Ordner in Outlook: Wie besser? (11)

Frage von Matsushita zum Thema Microsoft Office ...