Der Punkt des gesamten Programms:Wie führe ich ein Powershell-Skript in C++ aus?
Geben Sie einen Benutzernamen und ein Passwort ein, um die Berechtigungen eines Benutzers zu erhöhen, damit Benutzer, die nicht auf einen geschützten Ordner zugreifen können, diesen öffnen und anzeigen können. Der Benutzername wird in einem <map>
abgebildet, die einen Schlüssel zu ihrem Ordner enthält, sucht es nach ihren Ordner geht es dann mit dem Benutzernamen und Passwort an die reale Höhe in der folgenden Powershell-Skript zu tun:
param(
[string]$username,
[string]$password,
[string]$folder
)
Write-Host $username $password $folder
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword
Start-Process T:\folders\Explorer++\Explorer++.exe \\foo\boo\fileserver\allusers\specialUsers\$folder -Credential $credential
ich vorbei bin in den Benutzernamen, das Passwort und den Ordner in dieses Skript durch die Verwendung von System()
.
Der C++ Code, um das Skript und übergeben Variablen sieht wie folgt auszuführen:
String^ runCommand(string folder, string username, string password)
{
string explorerpp = "\\\\foo\\boo\\examplefolder\\Explorer++\\EXPLORER++.exe";
string space = " ";
string quote = "\"";
string start = "C:\\ProgramData\\Microsoft\Windows\\Start Menu\\Programs\\System Tools\\Windows Powershell";
string open = "open";
string domain = "domain\\";
string pwShell = "S:\\foo\\boo\\locationofscript\\pwShell.ps1 ";
string parentFolder = """\\\\foo\\boo\\folder\\Parent_folder\\special_users \\""";
string path = parentFolder + folder;
String^ dir = gcnew String(path.c_str());
string param = quote + domain+ username + quote + space + quote + password + quote + space + quote + folder + quote;
string command = "start powershell.exe" + space + pwShell + param;
system(command.c_str());
return dir;
}
Hinweis: Der Code sieht, wie es funktioniert aufgrund einer großen Menge an Debugging, verstehe ich, dass ich wahrscheinlich bin mit viele nicht benötigte Variablen.
Wenn System()
oder _popen
durchlaufen wurde, wird entweder eine .txt-Datei geöffnet, die ein Skript enthält, oder Fehler an der Eingabeaufforderung.
Wenn ich nehme, was der Wert string command
ist und fügen Sie es in eine Eingabeaufforderung Ich würde das Skript korrekt ausgeführt und dann öffnen Sie den richtigen Ordner.
Was ist das Problem mit C++, das es nicht erlaubt, dass das Skript korrekt ausgeführt wird, wenn die Eingabeaufforderung alles korrekt ausführt?
BIG EDIT:
Der Fehler, den ich bekommen habe ist C:\OurProj\pwShell.ps1 : File C:\OurProj\pwshell.ps1 cannot be loaded because running scripts is disabled on this system.
Ich habe nur auf die IT-Leute reden, und ich bin in der Lage Skripte auf diesem System laufen zu lassen, versuchte alles lokal zu machen, und wenn Ich führe das Skript durch Powershell funktioniert es.
EDIT 2:
Ich habe die Execution Policy geändert, wie vorgeschlagen wurde, und es tut RemoteSigned
zurückkehren, aber wenn der Code in C++ ausführt ich noch gesagt, dass ich Skripte deaktiviert.
Wo ist 'command' tatsächlich initialisiert? – Andrew
@Andrew versehentlich bei der Formatierung zu Post für Stack-Überlauf entfernt, wird es jetzt an der richtigen Stelle hinzugefügt. Das ist direkt über dem 'system (command.c_str())' Aufruf. – Bridger
In meinem System ist die Standardoperation von der Befehlszeile für eine .ps1-Datei das Öffnen in Notepad. (zB: wenn ich den Befehlsinhalt in der Befehlszeile starte, öffnet sich der Editor, nicht das Skript) Dies ist unter Windows 7. Sie müssen 'powershell.exe' vor Ihren Befehl setzen. – ebyrob