2015-05-11 10 views
0

Я пытаюсь установить logonhours для пользователей ldap, используя php. Я дошел до того, что создал графический интерфейс, который выглядит как активные каталоги с синими и серыми ячейками, отображающими разрешенные и запрещенные часы входа в систему. Моя проблема прерывается, я получаю «Сервер, не желающий выполнять», и я думаю, что он имеет какое-то отношение к моему pack («C», bindec (strrev ($ chunk))) вложен в цикл foreach, который не выплевывается правильный формат. Есть ли что-то, что я должен сделать для пакета («C», bindec (strrev ($ chunk))), чтобы гарантировать, что он всегда в правильном формате для моего DC, чтобы принять его?PHP Logonhours format

if (isset($_POST['logonhours'])){ 
$set_logonhours = $_POST['logonhours']; 
$set_logonhours_end = mb_substr($set_logonhours, -5); // EST TIMEZONE 
$set_logonhours_begin = mb_substr($set_logonhours, 0, -5); // EST TIMEZONE 
$set_logonhours_tz = $set_logonhours_end . $set_logonhours_begin; 

$set_eighthourchunks = str_split($set_logonhours_tz, 8); 


foreach ($set_eighthourchunks as $chunk){ 
$logondec = pack("C", bindec(strrev($chunk))); //inconsistently works sometimes 
} 
echo $logondec; 
$adldap->user()->modify($_POST['username'], array("logonhours"=>$logondec)); 


echo '<br>'; 
echo ldap_error($adldap->getLdapConnection()) . '<br>'; 
} 
+0

Кто-нибудь? ........ – Noob01

ответ

0

Через несколько месяцев я решил вернуться к этому с другим подходом, и понял это, передавая аргументы в Powershell скрипт!

PHP: --replace FOREACH В ВОПРОС С FOREACH НИЖЕ И ADD WSHELL Object/Command

foreach ($set_eighthourchunks as $chunk){ 
// $logondec .= pack("c", bindec(strrev($chunk))); GETS THE ROW CORRECT BUT CANT CHANGE TOUCHING ROWS 
$logondec .= bindec(strrev($chunk)) . ","; 
} 
$logondec = substr($logondec, 0, -1); 

$WshShell = new COM("WScript.Shell"); 
$WshShell->Run('powershell.exe -ExecutionPolicy ByPass -file C:\\inetpub\\wwwroot\\adLDAP\\acctmgmt\\runaslogonhours.ps1 "DOMAINNAMEHERE\\' . ADMINUSERNAME . '" "' . ADMINPASSWORD . '" ' . $user . ' "' . $logondec . '"'); 

Powershell: --create А PS1 СЦЕНАРИЙ В ОДНОМ КАТАЛОГЕ НАЗЫВАЕМОЙ runaslogonhours.ps1 с содержанием НИЖЕ

if (-not (Get-Module ActiveDirectory)){    
    Import-Module ActiveDirectory    
} 

$PASSWORD = $args[1] #password for cred with rights to set logon hours 
$USERNAME = $args[0] #username with rights to set logonhours 

$CMD = "C:\inetpub\wwwroot\adLDAP\acctmgmt\logonhours.ps1" 
$user = $args[2] #user you want to set logon hours for 
$inputhours = $args[3] #logon hours 
$arrhours = $inputhours.ToString().Replace("'","").Split(",") 
[byte[]]$hours= @($arrhours) 
$replaceHashTable = New-Object HashTable 
$replaceHashTable.Add("logonHours", $hours) 
$ARGS = @($user, $hours) 

$pw = convertto-securestring $PASSWORD -asplaintext –force 
$credential = new-object -typename system.management.automation.pscredential -argumentlist $USERNAME,$pw 



Set-ADUser -Identity $user -Replace $replaceHashTable -Credential $credential