查出不活动的计算机

如果我们的域是Windows 2003域,我们可以通过dsquery命令的inactive参数排查出一段时间没有活动的计算机。

  附件中包含两个cmd的文件,内容分别如下:

  DisableComputer.CMD

  dsquery computer -inactive 10 -stalepwd 70 |dsmod computer -disabled yes

  查处10周未登陆的机器以及70天未能更改域计算机密码的机器(数值可自行指定),然后把它们设成disabled。

  备注:-inactive指得是机器未logon的时间,-stalepwd是机器密码未改的时间,windows 2000以上的机器默认为30天,我们可以两者结合来看看哪些是非active的机器。如果要用-inactive参数,需要2003纯模式。如果单单使用-stalepwd,可以在混合模式下运行。

  dsquery对于不活动时间越长的计算机越正确。造成这一现象的原因是Active Directory是根据计算机是否验证身份来判断其是否活动的。一台1个月没有开机的计算机当然是不活动的,但是一台开机但是一个月无人操作的计算机也会被判断为不活动的,而第二种情况在服务器上是比较常见的(比如文件共享服务器)。所以我们不能根据dsquery结果立刻删除计算机帐号,还需要做一些验证工作(比如查询这一计算机名的IP)。

  DeleteComputer.CMD

  dsquery computer -disabled | dsrm –noprompt

  查出禁用机器然后删掉。

  备注:建议在使用DisableComputer.CMD两周之后,没有用户报错的情况下再使用DeleteComputer.CMD来删除域中多余的计算机帐号。

### 使用 MyBatisPlus 查询时处理表中存在的字段 当使用 MyBatisPlus 进行 SQL 操作时,如果实体类中的某些属性并存在于对应的数据库表中,则可能会引发错误。为了避免这种情况的发生,可以采取以下几种方法来解决问题。 #### 方法一:忽略映射列 通过设置 `@TableField(exist = false)` 注解标记那些在数据库中存在的字段。这使得框架会尝试将这些字段映射到实际的数据表上,从而避免了潜在的异常情况发生[^1]。 ```java public class User { private Long id; @TableField(exist = false) private String nonExistentColumn; // 数据库中无此字段 // getter and setter methods... } ``` #### 方法二:自定义字段处理器 对于更复杂的情况,比如需要在 Java 层面表示为集合或其他复合数据结构但在数据库里只是简单字符串类型的字段,可以通过实现 FieldFill 接口来自定义字段填充逻辑,并注册该处理器至全局配置或特定 Entity 中。这种方式仅解决了类型匹配的问题,还提高了代码可读性和维护性[^2]。 ```java @Component public class ListToStringTypeHandler implements TypeHandler<List<String>> { @Override public void setParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException { if (parameter != null && !parameter.isEmpty()) { ps.setString(i, StringUtils.join(parameter, ",")); } else { ps.setNull(i, Types.VARCHAR); } } @Override public List<String> getResult(ResultSet rs, String columnName) throws SQLException { String result = rs.getString(columnName); return Optional.ofNullable(result).map(s -> Arrays.asList(s.split(","))).orElse(Collections.emptyList()); } @Override public List<String> getResult(ResultSet rs, int columnIndex) throws SQLException { String result = rs.getString(columnIndex); return Optional.ofNullable(result).map(s -> Arrays.asList(s.split(","))).orElse(Collections.emptyList()); } @Override public List<String> getResult(CallableStatement cs, int columnIndex) throws SQLException { String result = cs.getString(columnIndex); return Optional.ofNullable(result).map(s -> Arrays.asList(s.split(","))).orElse(Collections.emptyList()); } } ``` 接着,在实体类中应用这个自定义的类型处理器: ```java @TableId(type = IdType.AUTO) private Integer id; @TableField(typeHandler = ListToStringTypeHandler.class) private List<String> tags; // 实际存入数据库的是逗号分隔符连接成的一个字符串 ``` #### 方法三:重命名查询结果集中的字段名称 如果是因为多表联结查询导致的结果集中出现了重复的名字或者是其他原因引起的冲突,可以在编写 SQL 的时候给相应的字段指定别名,然后再让 MyBatis 映射回原来的对象属性上去即可[^3]。 ```sql SELECT u.id AS userId, ua.balance as userBalance FROM users u JOIN accounts ua ON u.account_id = ua.id WHERE ... ``` 以上三种方式都可以有效地帮助开发者应对由于实体类数据库表之间存在差异而引起的各种问题。具体选择哪种取决于项目的实际情况和个人偏好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值