我很困惑,我是一名非常缺乏实践的软件工程师(该领域的最后一份工作是1993年!)做了一些小编码,使我的系统管理员工作变得更容易。我选择了#hell over powershell,因为它有更好的调试。我正在尝试做的是从电子表格中取出用户名,如果Active Directory中存在该用户名,请检查其到期日期,如果电子表格中的用户名是否晚于活动目录中设置的用户名,则将活动目录更新为反映。
我在X64 2012 Server上使用VS 2015 我有以下代码段
using System.DirectoryServices.AccountManagement AuthenticablePrincipal.AccountExpirationDate
foundUser是AuthenticablePrincipal
Globals.Uservars
是一个全球性的(我知道......请不要关于全局变量的讲座)字符串数组保存与AD用户对象相关的数据。
Uservars[4]
是电子表格中的失效日期。
Uservars[7]
是操作的反馈评论结果。
AccountExpires = foundUser.AccountExpirationDate.Value.ToLocalTime();
ThisDay = DateTime.FromOADate(Convert.ToDouble(Globals.UserVars[4]));
if (ThisDay!=null)
{
if (ThisDay > AccountExpires)
{
foundUser.AccountExpirationDate = ThisDay;
foundUser.Save();
Globals.UserVars[7] = "Account End Date Incremented";
OutputResult();
}
else
{
Globals.UserVars[7] = "Existing User No Changes Made";
OutputResult();
}
}`
我的困惑源于我没有收到错误的事实,如果我随后从AD读取了foundUser.AccountExpirationDate.Value.ToLocalTime();
的值,它已使用电子表格中的值更新,如果我重新运行该程序新值已到位,但flippin'在事务目录用户和计算机中未显示为已更改。
此外,如果我在更新AD之前尝试将DateTime值转换为FILETIME(我相信我应该这样做,因为我怀疑我实际上是用不正确的值更新AD,尽管我看到它,如果我读回来)它似乎抛出一个错误。 DUH?