我有一个应用程序,它将获取员工的最后登录详细信息,这是不准确的,因为在AD中有多个域控制器。为了获得最新的上次登录,我们找到了一个PowerShell脚本,它将连接到两个域控制器,并从两个域控制器获取数据,并在比较之后返回最近的记录(https://gallery.technet.microsoft.com/scriptcenter/Get-Last-Logon-for-Users-c8e3eab2)。我已经把脚本放在下面了。
PowerShell.ps1:
Import-Module ActiveDirectory
$hostname = "domaincontrollername1.test.**.**.***.**"
Write-Host $hostname
$user = Get-ADobject -Filter 'samaccountname -eq "id"' -SearchBase "OU=*** Users,DC=test,DC=***,DC=***,DC=***,DC=**" -Server $hostname -Properties "lastLogon"
Write-Host $user
$LastlogonTime1 = [DateTime]::FromFileTime($user.lastLogon)
Write-Host $LastlogonTime1
$hostname = "domaincontrollername2.test.**.**.***.**"
Write-Host $hostname
$user = Get-ADobject -Filter 'samaccountname -eq "id"' -SearchBase "OU=***Users,DC=***,DC=test,DC=***,DC=***,DC=**" -Server $hostname -Properties "lastLogon"
Write-Host $user
$LastlogonTime2 = [DateTime]::FromFileTime($user.lastLogon)
Write-Host $LastlogonTime2
if ($LastlogonTime1 -gt $LastlogonTime2)
{
$Lastlogon = $LastlogonTime1
}
else
{
$Lastlogon = $LastlogonTime2
}
Write-Host $Lastlogon现在的挑战是从PHP应用程序(Linux serever)调用此脚本。我用在互联网上找到的东西尝试了很多方法,但都没有用。我已经将连接详细信息和属性(显示在应用程序的AD详细信息中)放在了我们当前使用的位置(也保存了上次登录)。如果您能提供一种从PHP调用脚本的方法,感谢您的帮助。
公共函数__construct()
{
$this->server = "actual server";
$this->port = "number";
$this->user = "useraccount";
$this->password = "password";
$this->dn = "DC=***,DC=**,DC=**,DC=**,DC=***";
$this->attributes = array("samaccountname","givenname","sn","name","title","description","department","lastlogon","memberof","userAccountControl");
$this->filter = "samaccountname=";
parent::__construct();
}发布于 2020-12-11 01:28:58
从PHP运行shell脚本总是会引发很多安全问题。
我建议你,在你的PowerShell脚本中,将最后一次登录信息保存到数据库中,而不是使用PHP语言从数据库中检索它。
例如,您可以将其保存到MySQL DB中,如下所示:
$conn = ConnectToDatabase $user $pass $MySQLHost $database
$query = "INSERT INTO user (last_login) VALUES ('$LastLogon');"
$Command = New-Object MySql.Data.MySqlClient.MySqlCommand $query, $conn
$Command.ExecuteNonQuery()然后在PHP端,访问相同的数据库并获取信息。
https://stackoverflow.com/questions/65239022
复制相似问题