Я пытаюсь установить logonhours для пользователей ldap, используя php. Я дошел до того, что создал графический интерфейс, который выглядит как активные каталоги с синими и серыми ячейками, обозначающими разрешенные и запрещенные часы входа в систему. Моя проблема периодически я получаю «Сервер не хочет работать», и я думаю, что это как-то связано с моим pack («C», bindec (strrev ($ chunk))) вложенный в цикл foreach, который не выдает правильный формат. Есть ли что-то, что я должен прикрепить к pack («C», bindec (strrev ($ chunk))) заявление, чтобы убедиться, что он всегда в правильном формате, чтобы мой округ Колумбия принял его?
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>';
}
Через несколько месяцев я решил вернуться к этому, используя другой подход, и выяснил это, передав аргументы сценарию powershell!
PHP: — ЗАМЕНИТЕ FOREACH В ВОПРОСЕ С FOREACH НИЖЕ И ДОБАВЬТЕ WSHELL Объект / Команда
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: — СОЗДАЙТЕ СЦЕНАРИЙ 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
Других решений пока нет …