Точка в программе:Как выполнить скрипт powershell в C++?
Передайте имя пользователя и пароль, чтобы повысить привилегии пользователя, чтобы, если они не являются пользователями, которым разрешен доступ к защищенной папке, они все равно могут открывать и просматривать их. Имя пользователя отображается в <map>
, который содержит ключ к их папке, он ищет их папку а затем передает его вместе с именем пользователя и паролем, чтобы сделать реальное повышение в следующем Powershell скрипт:
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
Я проходящее в имени пользователя, пароле и папке в этом скрипте с использованием System()
.
C++ кода для выполнения сценария и передать в переменных выглядит следующим образом:
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;
}
Примечания: Код выглядит так, как это делает из-за огромное количество отладки, я понимаю, что я, вероятно, используя много ненужных переменных.
При запуске System()
или _popen
он либо открывает текстовый файл, содержащий скрипт или ошибки в командной строке.
Если бы я взял значение string command
и вставил его в командную строку, я бы правильно выполнил скрипт и открыв правильную папку.
В чем проблема с C++, которая не позволяет сценарию правильно работать, когда командная строка выполняет все правильно?
BIG EDIT:
Ошибка я получаю C:\OurProj\pwShell.ps1 : File C:\OurProj\pwshell.ps1 cannot be loaded because running scripts is disabled on this system.
Я просто поговорить с ИТ ребята, и я могу запускать скрипты на этой системе, пытались сделать все местные, и если Я запускаю скрипт через powershell, он работает.
EDIT 2:
Я изменил политику выполнения, как было предложено, и это делает вернуться RemoteSigned
, однако, когда код выполняется в C++ Я до сих пор говорят, что я отключил сценарии.
Где 'command' фактически инициализирована? – Andrew
@Andrew случайно удаляется при форматировании сообщения для переполнения стека, теперь он добавляется в правильное положение. Это прямо над вызовом 'system (command.c_str())'. – Bridger
В моей системе операция по умолчанию из командной строки в файле .ps1 заключается в том, чтобы открыть ее в блокноте. (т. е. если я запустил содержимое вашей команды в командной строке, он откроет блокнот, а не запустит скрипт). Это находится в Windows 7. Вам нужно поставить 'powershell.exe' перед вашей командой. – ebyrob