PowerShell-Befehl ausführen von Batch
Habe ich das powershell-Befehl, um die whitespace-Zeichen in jedem meiner Exchange-Datenbanken, aber ich kann es nicht ausführen über batch.
Hier ist der shell-Befehl bestätigt arbeiten:
get-mailboxdatabase -status |
select name,
@{Name="DataBaseSize";Expression={ "{0:N2} GB" -f (($_.DatabaseSize.ToBytes()) / 1gb) }},
@{Name="AvailableNewMailboxSpace";Expression={ "{0:N2} GB" -f(($_.AvailableNewMailboxSpace.ToBytes()) / 1gb) }},
@{Name="Difference";Expression={ "{0:N2} GB" -f (($_.DatabaseSize.ToBytes() - $_.AvailableNewMailboxSpace.ToBytes()) / 1gb) }}
Hier ist der batch zum ausführen des Shell-Befehls:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command ". 'D:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto;
Ich denke, dass die Zeichen in der shell-Befehl sind nicht zusammen mit der Gruppe und versucht haben "^"
Ihnen, wo Sie Versagen. Jede Hilfe würde geschätzt werden. Ich bin ziemlich neu in batch und powershell, so nutzen Sie bitte kleine Worte 🙂
NEUE INFO:
Hi danke für deine Hilfe. Zur Beantwortung Ihrer ersten Frage, warum versuche ich dies mit einem batch ist, denn dies ist nur einer der Schritte, die ich bin versucht zu erreichen. Ich möchte dieses powershell-Befehl für die Ausgabe an .txt-doc, so kann ich dann eine FOR-Schleife gegen Sie und schreiben Sie die Parameter in eine html-Datei, welche dann blat ' ed täglich, um mein IT-team bei der überwachung des Wachstums auf die Leerzeichen. Auch die Fehler-codes, die ich erhalte sind nicht in Bezug auf Ihre Annahmen und ich entschuldige mich für nicht einschließlich Sie. Der Fehlercode den ich bekomme, ist: Unerwartetes token ':N2' in expression oder Anweisung. Wenn ich Sie entfernen ":N2" aus den Befehl, es meckert dann über die 'GB', und schließlich, wenn ich entfernen Sie das "GB" es meckert dann über den Begriff 'DataBaseSize'. Also ich werde versuchen Eure Lösungen hier in den nächsten paar Stunden, ich wollte nur sagen, danke und Sie wissen lassen, die Fehler, die ich sehe.
NEUEN FEHLER:
Nachdem ich es mit Beavels Vorschlag, erhalte ich diese Fehler:
C:\temp2>Leerzeichen.Fledermaus
Der Begriff 'get-mailboxdatabase' wird nicht als name eines cmdlet, funkt
ion, Skriptdatei oder bedienbare Programm. Überprüfen Sie die Schreibweise des namens, oder wenn ein
Pfad eingeschlossen ist, stellen Sie sicher, dass der Pfad korrekt ist und versuchen Sie es erneut.
At C:\temp2\Whitespace.ps1:1 char:20
+ get-mailboxdatabase <<<< -status |select name, @{Name="DataBaseSize";Express
ion={ "{0:N2} GB" -f (($_.DatabaseSize.ToBytes()) / 1gb) }}, @{Name="AvailableN
ewMailboxSpace";Expression={ "{0:N2} GB" -f(($_.AvailableNewMailboxSpace.ToByte
s()) / 1gb) }}, @{Name="Difference";Expression={ "{0:N2} GB" -f (($_.DatabaseSi
ze.ToBytes() - $_.AvailableNewMailboxSpace.ToBytes()) / 1gb) }}
+ CategoryInfo : ObjectNotFound: (get-mailboxdatabase:String) [],
CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Ist es, die sich über den Begriff zu bekommen-mailboxedatabase dies ist jedoch ein CDMLET. Ugh....
JOESPH
C:\temp2>. 'C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps
1'
'.' ist nicht als ein interner oder externer Befehl,
betriebsbereiten Programm oder batch-Datei.
C:\temp2>Connect-ExchangeServer -auto
"Connect-ExchangeServer' ist nicht als ein interner oder externer Befehl,
betriebsbereiten Programm oder batch-Datei.
C:\temp2>$properties = @(
'$'Immobilien' ist nicht als ein interner oder externer Befehl,
betriebsbereiten Programm oder batch-Datei.
C:\temp2>"name"
'"name"' ist nicht als ein interner oder externer Befehl,
betriebsbereiten Programm oder batch-Datei.
'{Name' wird nicht als interner oder externer Befehl,
betriebsbereiten Programm oder batch-Datei.
'{Name' wird nicht als interner oder externer Befehl,
betriebsbereiten Programm oder batch-Datei.
'{Name' wird nicht als interner oder externer Befehl,
betriebsbereiten Programm oder batch-Datei.
C:\temp2># möchten Sie vielleicht, um diese Datei auf einem Datei-server irgendwo
'#' wird nicht als interner oder externer Befehl,
betriebsbereiten Programm oder batch-Datei.
C:\temp2>$Dateipfad = "\server\share\Some\Path\To\File.html"
'$Dateipfad' ist nicht als ein interner oder externer Befehl,
betriebsbereiten Programm oder batch-Datei.
C:\temp2>$data = Get-mailboxdatabase -status | select $properties | sort-obj
ect-name | ConvertTo-Html | Set-Content $Dateipfad -
'$Daten' ist nicht als ein interner oder externer Befehl,
betriebsbereiten Programm oder batch-Datei.
Ich kann nur diese Datenbank offline, und führen Sie eine Defragmentierung der Speicherplatz. Anstatt zu versuchen, zu überwachen, ihn von dieser verrückten Idee.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste Frage die ich habe ist, warum sind Sie versuchen zu tun, dies über eine batch-Datei?
Option 1
Wenn Sie versuchen, etwas zu bekommen, dass gestartet werden kann, mit einem Doppelklick aus einem Datei-explorer, und Sie mithilfe von PowerShell 3.0 verwenden, können Sie "mit PowerShell Ausführen" - Funktion (run
Get-Help about_Run_With_PowerShell
aus einer PowerShell-Eingabeaufforderung). Erstellen Sie einfach eine Datei mit einer .ps1-Erweiterung und legen Sie den Inhalt in etwa so:Dann einfach mit der rechten Maustaste auf die Datei und wählen Sie "mit PowerShell Ausführen"
Option 2
Wenn Sie versuchen, ein powershell-Skript oder ein Befehl ausgeführt werden, von einigen software - /system nicht mögen oder verstehen PowerShell.
Nun, mit keine wirkliche Fehlermeldungen, oder die Ausgabe zu prüfen, habe ich zu Beginn machen einige Annahmen.
Beim ausführen der batch-script, erhalten Sie einen Fehler wie:
Wenn dem so ist, dann haben wir einige Probleme mit der execution policy. Für weitere Informationen, verwenden Sie entweder
Get-Help about_Execution_Policies
oder gehen Sie auf der MS Technet Seite über ausführungsrichtlinien.Meine persönliche Präferenz ist die lokale Maschine Bereich festlegen der Ausführungsrichtlinie "RemoteSigned", aber das ist nur mir.
Nun, es sei denn, es fehlt etwas vom Inhalt deiner batch-Datei als bereitgestellt, es sieht fast identisch mit dem Feld "Ziel" des Exchange-Verwaltungsshell-Verknüpfung installiert ist mit der Exchange Management Tools. Wie sind Sie mit der Weitergabe der PowerShell-Befehl? Sind Sie es als commandline-argument, um Ihre batch-Datei, oder ist es Teil der Argumente, die hart codiert in der batch-Datei? Mein Vorschlag wäre, entweder zu tun, was foxdrive schlägt, oder etwas mehr wie folgt:
Erstellen Sie ein powershell-Skript, das für alle Befehle, die Sie benötigen. Nennen wir diese
MdbWhitespace.ps1
und setzen Sie den Inhalt auf Ihren Befehl.Erstellen Sie Ihre batch-Datei. Nennen wir es
RunExchPs.bat
und setzen die Inhalte umGrundsätzlich sind wir der Einrichtung des Exchange-Remote-Sessions (
Get-Help about_PSSessions
undGet-Help about_Remote
) und verbinden die gleiche Weise, wie die Exchange Management Shell hat, dann fordern wir ein Skript, die Sie in den etablierten Umgebung.Ich gehe davon aus, dass für den nächsten Schritt, mit dem Sie Ihre batch-Datei und die PS-Skript im gleichen Verzeichnis, das aktuelle Verzeichnis in einer offenen Eingabeaufforderung, und führen Sie
.\RunExchPs.bat .\MdbWhitepace.ps1
.So lange, wie Sie Ihre Ausführungsrichtlinie ist richtig eingestellt, damit Skripts ausgeführt werden, das funktioniert perfekt. Wenn Sie nicht können oder nicht wollen, um dauerhaft die Ausführungsrichtlinie ändern, können Sie Ihre batch-Datei zu ändern ist es für diese Sitzung:
Hoffe, das hilft.
ÄNDERUNGEN IN REAKTION AUF DIE KOMMENTARE
Für das Cmdlet ConvertTo-Html, die ich erwähnt in dem Kommentar,
Können Sie tun
$dataFromCommand | ConvertTo-Html | Set-Content "PathTo\File.html"
Gibt Sie folgende Ausgabe (als HTML-Tabelle):
Oder können Sie sich eine Liste:
$dataFromCommand | ConvertTo-Html -Als Liste | Set-Content "PathTo\File.html"
gibt:
Wenn Sie wollen, dass dies etwas ist, können Sie einstellen und vergessen,
machen Sie eine Skript-Datei mit dem folgenden Inhalt:
Dann führen Sie das Skript von einer geplanten Aufgabe (wenn Sie mithilfe von PowerShell 2.0)
Für die geplante Aufgabe, Aktion, Programm starten, zeigen Sie auch das Programm in der Powershell EXE-Datei (in der Regel
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
) legen Sie dann die "Argumente Hinzufügen" - Feld:-NoLogo -NonInteractive R:\Full\Path\To\Script\script.ps1
Hinzufügen, was löst die Sie wollen, und Zack, automatisch verwaltet html-Datei für die Jungs zu überwachen.
Wenn Sie mit PowerShell 3.0 oder höher, können Sie die folgenden von jedem PowerShell-Eingabeaufforderung ein:
Alternative ist die Option 1 ab @FinalizedFrustration Antwort und habe einfach die batch-Datei, führen Sie das Skript enthält alle Befehle, in etwa so:
Vorausgesetzt MdbWhitespace.ps1 aussieht:
Dies ist @FinalizedFrustrations original-option #1 mit dem Add-PSSnappin eingefügt. Ich war der Annahme, diese wurden geladen in die PS-Umgebung (ich arbeite nicht mit Exchange, so dass unter Umständen modifiziert werden müssen).
Seine zweite option funktioniert besser, wenn Sie schreiben wollen, mehrere Skripts ausgeführt werden von dieser batch-option.