Windows的一键安检脚本

批量处理服务器的运维人员可以自己改改用。

1、这个批处理依赖Sysinternals的两个小工具,以及windows自带的WMIC。

用于检测启动项的autorunsc64.exe: https://docs.microsoft.com/zh-cn/sysinternals/downloads/autoruns

用于检查文件数字签名的sigcheck64.exe: https://docs.microsoft.com/zh-cn/sysinternals/downloads/sigcheck

2、执行完后,文件都拷贝到c:\tool目录,c:\tool\backup中会留下原始记录,便于后续来查看。
 

::查询用户(Administrator是否改名、是否有其他启用的Administrators组用户)
::查询启动项(是否有非系统默认的启动项)
::查询进程(是否有非白名单进程)
::查询防火墙(是否开启,是否屏蔽了某些特殊端口,仅对必要的ip开放)
::查询TCP监听(是否仅监听了必要的端口)
::密码和日志审计策略设置
::--------------------------------------------------------  
::input: null
::output: Success|Failed\r\nReason
::--------------------------------------------------------  

::关闭命令回显,执行时不显示每条命令的命令行,@表示本行也不显示
@echo off
if not exist "c:\tool\backup\" (mkdir c:\tool\backup\)
del /f /q c:\tool\securitycheck.lock > nul 2>&1

ver | find "5.2" > nul
if %ERRORLEVEL% == 0 goto ver_2003
ver | find "6.1" >nul
if %ERRORLEVEL% == 0 goto ver_2008
ver | find "6.2" > nul
if %ERRORLEVEL% == 0 goto ver_2012
ver | find "6.3" > nul
if %ERRORLEVEL% == 0 goto ver_2012R2
goto warnthenexit

::--------------------------------------------------------  
::-- Function section starts below here  
::--------------------------------------------------------  

:echofail
if not exist "c:\tool\securitycheck.lock" (
	echo Failed
	echo 1 > c:\tool\securitycheck.lock
)
goto:eof


:checksign
::检查文件签名
::call:checksign "c:\windows\system32\notepad.exe" buff
::return: unsigned | microsoft signed
if not exist "c:\tool\sigcheck64.exe" (copy sigcheck64.exe c:\tool\ >nul)
	set "filepath=%~f1"
	if not "%filepath%" EQU "" (
		if exist "%filepath%" (
			for /f "usebackq tokens=2,4 delims=," %%i in (`c:\tool\sigcheck64.exe /accepteula /c /nobanner "%filepath%" ^| find /i "signed"`) do (
				if %%i EQU "Signed" (
					if /i %%j EQU "Microsoft Corporation" (
						set "%2=microsoft signed"
						goto:eof
					)
					if /i %%j EQU "Microsoft Windows" (
						set "%2=microsoft signed"
						goto:eof
					)
					if /i %%j EQU "Microsoft" (
						set "%2=microsoft signed"
						goto:eof
					)
				) else (
					set "%2=unsigned"
					goto:eof
				)
			)
		) else ( set "%2=file not exist" )
	)
goto:eof


:checkuser
::查询用户(Administrator是否改名、Guest是否禁用、是否有其他启用的Administrators组用户)
setlocal enabledelayedexpansion  
set flag=0
::因为wmic输出的是unicode格式,其他命令输出ASCII的,两个放一块就乱码了。
wmic useraccount list full | more >> c:\tool\backup\backup.log
for /f "tokens=1 delims= " %%i in ('wmic useraccount list status^|find "OK"') do (
	set domainusername=%%i
	set username=!domainusername:*\=!
	::echo !username!
	if /i "!username!" EQU "administrator" (
		call:echofail
		echo you should rename administrator 
		exit /b 1
	)
	if /i "!username!" EQU "guest" (
		call:echofail
		echo you should deny guest
		exit /b 1
	)
	for /f "usebackq tokens=1 delims= " %%a in (`net user !username!^|find /i "Administrator"`) do (
		if "%%a" NEQ "" (set flag=!flag!+1)
	)				
)
if !flag! GTR 1 (
	call:echofail
	echo not only one admin
	exit /b 1
)
setlocal disabledelayedexpansion  
goto:eof


:checkstartup
::查询启动项(是否有非系统默认的启动项)
setlocal enabledelayedexpansion
set flag=0
if not exist "c:\tool\autorunsc64.exe" (copy autorunsc64.exe c:\tool\ >nul)
c:\tool\autorunsc64.exe /accepteula /m /s /nobanner | more>> c:\tool\backup\backup.log
for /f "tokens=10 delims=," %%i in ('c:\tool\autorunsc64.exe /accepteula /m /s /nobanner /c^| find /i "exe" ^| find /v "winvnc.exe" ^| find /v "rdpclip.exe"^| find /v "WinMail.exe" ^|find /v "AlternateShell"') do (
	if "%%i" GTR "" (
		if !flag! EQU 0 (
			set /A flag=1
			call:echofail
		)
		echo startup NOT in whitelist: %%i
	)
)
if !flag! EQU 1 (
	exit /b 1
)
setlocal disabledelayedexpansion  
goto:eof


:ProcessWhiteList
::保存进程白名单,并且与传入的进程名进行对比,增加需要修改list[]和list_length
set list[0]=c:\SSHD\bin\cygrunsrv.exe
set list[1]=C:\SSHD\sbin\sshd.exe
set list[2]=C:\Program Files\GCloud\gcloudagent.exe
set list_length=3

set list_index=0
:loopstart
if !list_index! EQU !list_length! (
	::循环匹配白名单结束,检查签名开始
	set buff=
	call:checksign "%~f1" buff
	if "!buff!" EQU "microsoft signed" (
		set buff=
		goto:eof
	)
	::签名也不是微软的,报错吧
	set buff=process NOT in whitelist: "%~f1"
	set /A list_index=0
	goto:eof
)
for /f "usebackq tokens=2 delims==" %%a in (`set list[!list_index!]`) do (
	if /i "%~f1" == "%%~fa" (
		::echo process in whitelist: "%~f1"
		set buff=
		set /A list_index=0
		goto:eof	
	)	
)
set /A list_index=!list_index!+1
goto:loopstart


:checkprocess
::查询进程(是否有非白名单进程)
setlocal enabledelayedexpansion 
set flag=0
wmic process get ExecutablePath | more >> c:\tool\backup\backup.log
for /f "usebackq tokens=* delims= " %%i in (`wmic process get ExecutablePath^|findstr -v "ExecutablePath"`) do (
	set "name=%%i"
	set "name=!name:~,-1!"
	if /i not "!name!" == "" (
		set "name=%%~fi"
		call :ProcessWhiteList "!name!"
		if not "!buff!" == "" (
			if !flag! EQU 0 (
				set /A flag=1
				call:echofail
			)
			echo !buff!
			set buff=
		)
	)
)
if !flag! EQU 1 (
	exit /b 1
)
setlocal disabledelayedexpansion  
goto:eof


:checkfirewall
::查询防火墙(是否开启,某些端口是否做了IP限制)
setlocal enabledelayedexpansion 
set flag=0
netsh advfirewall firewall show rule name=all dir=in type=dynamic status=enabled >> c:\tool\backup\backup.log
for /f "usebackq tokens=1,2 delims= " %%i in (`netsh advfirewall show currentprofile ^| findstr "状态.*启用"`) do (
	::英文系统会有问题
	if not "%%j"=="启用" (
		set /A flag=1			
	)
)
for /f "usebackq tokens=1,2,3 delims= " %%i in (`netsh advfirewall firewall show rule name^=all dir^=in type^=dynamic status^=enabled ^| findstr "IP"`) do (
	::批处理的坑是如果findstr没找到内容,是不执行for循环内的代码的
	echo %%k  | findstr "8.8.8.8 !!!这里换成你的公司出口ip!!!" >nul && set "a=yes" || set "a=no"
	if "!a!" EQU "yes" (
		set /A flag=2			
	)
)
if !flag! EQU 1 (
	call:echofail
	echo firewall is off
	exit /b 1
)
if !flag! EQU 0 (
	call:echofail
	echo firewall config error
	exit /b 1
)
setlocal disabledelayedexpansion  
goto:eof


:PortWhiteList
set "portwhitelist=135 445 3389 47001 end"
set tmp=!portwhitelist!
:tcploop
::循环匹配白名单
for /f "tokens=1,*" %%m in ("!tmp!") do (
	if "%%m" EQU "%~1" (
		set buff=
		goto:eof
	) 
	set tmp=%%n
)
if not "!tmp!" EQU "end" goto tcploop
::动态或私有端口:49152to65535或1025to103X只能checksign,微软的签名就不管,不是微软签名的就报出来
set "pid=%2"
for /f "usebackq tokens=*" %%a in (`wmic process where processid^=!pid! get ExecutablePath /value`) do (
	set "line=%%a"
	set "line=!line:~,-1!"
	if "!line!" GTR "" (
		(echo !line!|findstr -i "ExecutablePath">nul)&&(set "filepath=!line:~15!")
		if "!filepath!" GTR "" (
			set buff=
			call:checksign !filepath! buff
			if "!buff!" EQU "microsoft signed" (
				set buff=
				goto:eof
			)
		)
	)
)
set buff=port NOT in whitelist: %~1
goto:eof

:checktcp
::查询TCP监听(是否仅监听了必要的端口)
setlocal enabledelayedexpansion 
set flag=0
netstat -ano | find "LISTEN" | find "0.0.0.0" | find /v "127.0.0.1" >> c:\tool\backup\backup.log
for /f "usebackq tokens=2,5 delims= " %%i in (`netstat -ano ^| find "LISTEN" ^| find "0.0.0.0" ^| find /v "127.0.0.1"`) do (
	set "port=%%i"		
	set "port=!port:*:=!"
	
	set "pid=%%j"

	call :PortWhiteList !port! !pid!
	if not "!buff!" == "" (
		if !flag! EQU 0 (
			set /A flag=1
			call:echofail
		)
		echo !buff!
		set buff=
	)
)
if !flag! EQU 1 (
	exit /b 1
)
setlocal disabledelayedexpansion  
goto:eof


:secedit
::密码和日志审计策略设置
setlocal enabledelayedexpansion 
reg add HKLM\System\CurrentControlSet\Services\Tcpip\Parameters /v MaxUserPort /t REG_DWORD /d 65534 /f >nul
if not exist "c:\tool\celue.inf" (copy celue.inf c:\tool\ >nul)
secedit /configure /db c:\tool\celue.sdb /CFG c:\tool\celue.inf >nul
setlocal disabledelayedexpansion  
goto:eof


::--------------------------------------------------------  
::-- System section starts below here  
::--------------------------------------------------------  

:ver_2012
::Run Windows Server 2012 specific commands here.
::echo 2012
set flag=0
::buff全局变量 用来接收各种函数的返回值
set buff=

call:checkuser
if %ERRORLEVEL% GTR 0 (set /A flag=%flag%+1)
call:checkstartup
if %ERRORLEVEL% GTR 0 (set /A flag=%flag%+1)
call:checkprocess
if %ERRORLEVEL% GTR 0 (set /A flag=%flag%+1)
call:checkfirewall
if %ERRORLEVEL% GTR 0 (set /A flag=%flag%+1)
call:checktcp
if %ERRORLEVEL% GTR 0 (set /A flag=%flag%+1)
call:secedit
if %ERRORLEVEL% GTR 0 (set /A flag=%flag%+1)

if %flag% GTR 0 goto exit
goto succ


:ver_2012R2
::Run Windows Server 2012 R2 specific commands here.
goto:ver_2012
echo Failed
echo Win2012R2
goto exit


:ver_2008
::Run Windows Server 2008 specific commands here.
goto:ver_2012
echo Failed
echo Win2008
goto exit


:ver_2003
::Run Windows Server 2003 specific commands here.
echo Failed
echo Win2003
goto exit

::--------------------------------------------------------  
::-- END!  
::--------------------------------------------------------  
:warnthenexit
echo Failed
echo system unknown
goto exit

:succ
echo Success
goto end

:exit
del /f /q c:\tool\securitycheck.lock > nul 2>&1
goto end


:end

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 文本 1 引言 1 1.1 每次处理一个字符 6 1.2 字符和字符值之间的转换 7 1.3 测试一个对象是否是类字符串 8 1.4 字符串对齐 10 1.5 去除字符串两端的空格 11 1.6 合并字符串 11 1.7 将字符串逐字符或逐词反转 14 1.8 检查字符串中是否包含某字符集合中的字符 15 1.9 简化字符串的translate方法的使用 18 1.10 过滤字符串中不属于指定集合的字符 20 1.11 检查一个字符串是文本还是二进制 23 1.12 控制大小写 25 1.13 访问子字符串 26 1.14 改变多行文本字符串的缩进 29 1.15 扩展和压缩制表符 31 1.16 替换字符串中的子串 33 1.17 替换字符串中的子串-Python 2.4 34 1.18 一次完成多个替换 36 1.19 检查字符串中的结束标记 39 1.20 使用Unicode来处理国际化文本 40 1.21 在Unicode和普通字符串之间转换 43 1.22 在标准输出中打印Unicode字符 45 1.23 对Unicode数据编码并用于XML和HTML 46 1.24 让某些字符串大小写不敏感 49 1.25 将HTML文档转化为文本显示到UNIX终端上 52 第2章 文件 55 引言 55 2.1 读取文件 59 2.2 写入文件 62 2.3 搜索和替换文件中的文本 64 2.4 从文件中读取指定的行 65 2.5 计算文件的行数 66 2.6 处理文件中的每个词 68 2.7 随机输入/输出 70 2.8 更新随机存取文件 71 2.9 从zip文件中读取数据 73 2.10 处理字符串中的zip文件 74 2.11 将文件树归档到一个压缩的tar文件 76 2.12 将二进制数据发送到Windows的标准输出 77 2.13 使用C++的类iostream语法 78 2.14 回退输入文件到起点 80 2.15 用类文件对象适配真实文件对象 83 2.16 遍历目录树 84 2.17 在目录树中改变文件扩展名 85 2.18 从指定的搜索路径寻找文件 86 2.19 根据指定的搜索路径和模式寻找文件 87 2.20 在Python的搜索路径中寻找文件 88 2.21 动态地改变Python搜索路径 89 2.22 计算目录间的相对路径 91 2.23 跨平台地读取无缓存的字符 93 2.24 在Mac OS X平台上统计PDF文档的页数 94 2.25 在Windows平台上修改文件属性 95 2.26 从OpenOffice.org文档中提取文本 96 2.27 从微软Word文档中抽取文本 97 2.28 使用跨平台的文件锁 98 2.29 带版本号的文件名 100 2.30 计算CRC-64循环冗余码校验 102 第3章 时间和财务计算 105 引言 105 3.1 计算昨天和明天的日期 111 3.2 寻找上一个星期五 112 3.3 计算日期之间的时段 114 3.4 计算歌曲的总播放时间 115 3.5 计算日期之间的工作日 116 3.6 自动查询节日 118 3.7 日期的模糊查询 121 3.8 检查夏令时是否正在实行 123 3.9 时区转换 124 3.10 反复执行某个命令 125 3.11 定时执行命令 127 3.12 十进制数学计算 129 3.13 将十进制数用于货币处理 130 3.14 用Python实现的简单加法器 133 3.15 检查信用卡校验和 136 3.16 查看汇率 137 第4章 Python技巧 139 引言 139 4.1 对象拷贝 140 4.2 通过列表推导构建列表 144 4.3 若列表中某元素存在则返回之 146 4.4 循环访问序列中的元素和索引 147 4.5 在无须共享引用的条件下创建列表的列表 148 4.6 展开一个嵌套的序列 149 4.7 在行列表中完成对列的删除和排序 152 4.8 二维阵列变换 154 4.9 从字典中取值 155 4.10 给字典增加一个条目 157 4.11 在无须过多援引的情况下创建字典 158 4.12 将列表元素交替地作为键和值来创建字典 159 4.13 获取字典的一个子集 161 4.14 反转字典 163 4.15 字典的一键多值 164 4.16 用字典分派方法和函数 166 4.17 字典的并集与交集 167 4.18 搜集命名的子项 169 4.19 用一条语句完成赋值和测试 171 4.20 在Python中使用printf 174 4.21 以指定的概率获取元素 174 4.22 在表达式中处理异常 176 4.23 确保名字已经在给定模块中被定义 178 第5章 搜索和排序 180 引言 180 5.1 对字典排序 185 5.2 不区分大小写对字符串列表排序 185 5.3 根据对象的属性将对象列表排序 187 5.4 根据对应值将键或索引排序 189 5.5 根据内嵌的数字将字符串排序 192 5.6 以随机顺序处理列表的元素 193 5.7 在增加元素时保持序列的顺序 195 5.8 获取序列中最小的几个元素 197 5.9 在排序完毕的序列中寻找元素 199 5.10 选取序列中最小的第n个元素 200 5.11 三行代码的快速排序 203 5.12 检查序列的成员 206 5.13 寻找子序列 208 5.14 给字典类型增加排名功能 210 5.15 根据姓的首字母将人名排序和分组 214 第6章 面向对象编程 217 引言 217 6.1 温标的转换 223 6.2 定义常量 225 6.3 限制属性的设置 227 6.4 链式字典查询 229 6.5 继承的替代方案-自动托管 231 6.6 在代理中托管特殊方法 234 6.7 有命名子项的元组 237 6.8 避免属性读写的冗余代码 239 6.9 快速复制对象 240 6.10 保留对被绑定方法的引用且支持垃圾回收 243 6.11 缓存环的实现 245 6.12 检查一个实例的状态变化 249 6.13 检查一个对象是否包含某种必要的属性 252 6.14 实现状态设计模式 255 6.15 实现单例模式 257 6.16 用Borg惯用法来避免“单例”模式 259 6.17 Null对象设计模式的实现 263 6.18 用_ _init_ _参数自动初始化实例变量 266 6.19 调用超类的_ _init_ _方法 267 6.20 精确和安全地使用协作的超类调用 270 第7章 持久化和数据库 273 引言 273 7.1 使用marshal模块序列化数据 275 7.2 使用pickle和cPickle模块序列化数据 277 7.3 在Pickling的时候压缩 280 7.4 对类和实例使用cPickle模块 281 7.5 Pickling被绑定方法 284 7.6 Pickling代码对象 286 7.7 通过shelve修改对象 288 7.8 使用Berkeley DB数据库 291 7.9 访问MySQL数据库 294 7.10 在MySQL数据库中储存BLOB 295 7.11 在PostgreSQL中储存BLOB 296 7.12 在SQLite中储存BLOB 298 7.13 生成一个字典将字段名映射为列号 300 7.14 利用dtuple实现对查询结果的灵活访问 302 7.15 打印数据库游标的内容 304 7.16 适用于各种DB API模块的单参数传递风格 306 7.17 通过ADO使用Microsoft Jet 308 7.18 从Jython Servlet访问JDBC数据库 310 7.19 通过Jython和ODBC获得Excel数据 313 第8章 调试和测试 315 引言 315 8.1 阻止某些条件和循环的执行 316 8.2 在Linux上测量内存使用 317 8.3 调试垃圾回收进程 318 8.4 捕获和记录异常 320 8.5 在调试模式中跟踪表达式和注释 322 8.6 从traceback中获得更多信息 324 8.7 当未捕获异常发生时自动启用调试器 327 8.8 简单的使用单元测试 328 8.9 自动运行单元测试 330 8.10 在Python 2.4中使用doctest和unittest 331 8.11 在单元测试中检查区间 334 第9章 进程、线程和同步 336 引言 336 9.1 同步对象中的所有方法 339 9.2 终止线程 342 9.3 将Queue.Queue用作优先级队列 344 9.4 使用线程池 346 9.5 以多组参数并行执行函数 349 9.6 用简单的消息传递协调线程 351 9.7 储存线程信息 353 9.8 无线程的多任务协作 357 9.9 在Windows中探测另一个脚本实例的运行 359 9.10 使用MsgWaitForMultipleObjects处理Windows消息 360 9.11 用popen驱动外部进程 363 9.12 获取UNIX Shell命令的输出流和错误流 364 9.13 在UNIX中fork一个守护进程 367 第10章 系统管理 370 引言 370 10.1 生成随机密码 371 10.2 生成易记的伪随机密码 372 10.3 以POP服务器的方式验证用户 375 10.4 统计Apache中每个IP的点击率 376 10.5 统计Apache的客户缓存的命中率 378 10.6 在脚本中调用编辑器 379 10.7 备份文件 381 10.8 选择性地复制邮箱文件 383 10.9 通过邮箱创建一个邮件地址的白名单 384 10.10 阻塞重复邮件 386 10.11 检查你的Windows声音系统 388 10.12 在Windows中注册和反注册DLL 388 10.13 检查并修改Windows自动运行任务 390 10.14 在Windows中创建共享 391 10.15 连接一个正在运行的Internet Explorer实例 392 10.16 读取Microsoft Outlook Contacts 393 10.17 在Mac OS X中收集详细的系统信息 396 第11章 用户界面 400 引言 400 11.1 在文本控制台中显示进度条 402 11.2 避免在编写回调函数时使用lambda 404 11.3 在tkSimpleDialog函数中使用默认值和区间 405 11.4 给Tkinter列表框增加拖曳排序能力 406 11.5 在Tkinter部件中输入一个重音字符 408 11.6 在Tkinter中嵌入内联的GIF 410 11.7 转换图片格式 412 11.8 在Tkinter中实现一个秒表 415 11.9 用线程实现GUI和异步I/O 的结合 417 11.10 在Tkinter中使用IDLE的 Tree部件 421 11.11 在Tkinter Listbox中支持单行多值 423 11.12 在Tkinter部件之间复制Geometry方法和选项 427 11.13 在Tkinter中实现一个带标签的记事本 429 11.14 使用wxPython实现带面板的记事本 431 11.15 在Jython中实现一个ImageJ插件 433 11.16 用Swing和Jython来通过URL查看图片 434 11.17 在Mac OS中获得用户输入 434 11.18 程序化地创建Python Cocoa GUI 437 11.19 用IronPython实现淡入窗口 439 第12章 XML处理 441 引言 441 12.1 检查XML的格式完好性 443 12.2 计算文档中标签的个数 444 12.3 获得XML文档中的文本 445 12.4 自动探测XML的编码 447 12.5 将一个XML文档转化成Python对象树 449 12.6 从XML DOM节点的子树中删除仅有空白符的文本节点 451 12.7 解析Microsoft Excel的XML 452 12.8 验证XML文档 454 12.9 过滤属于指定命名空间的元素和属性 455 12.10 用SAX合并连续的文本事件 458 12.11 使用MSHTML来解析XML或HTML 461 第13章 网络编程 462 引言 462 13.1 通过Socket数据报传输消息 464 13.2 从Web抓取文档 466 13.3 过滤FTP站点列表 467 13.4 通过SNTP协议从服务器获取时间 468 13.5 发送HTML邮件 469 13.6 在MIME消息中绑入文件 471 13.7 拆解一个分段MIME消息 474 13.8 删除邮件消息中的附件 475 13.9 修复Python 2.4的email.FeedParser 解析的消息 477 13.10 交互式地检查POP3邮箱 479 13.11 探测不活动的计算机 482 13.12 用HTTP监视网络 487 13.13 网络端口的转发和重定向 489 13.14 通过代理建立SSL隧道 492 13.15 实现动态IP协议 495 13.16 登录到IRC并将消息记录到磁盘 498 13.17 访问LDAP服务 500 第14章 Web编程 502 引言 502 14.1 测试CGI是否在工作 503 14.2 用CGI脚本处理URL 506 14.3 用CGI上传文件 507 14.4 检查web页面的存在 509 14.5 通过HTTP检查内容类型 510 14.6 续传HTTP下载文件 512 14.7 抓取Web页面时处理Cookie 513 14.8 通过带身份验证的代理进行HTTPS导航 516 14.9 用Jython实现Servlet 517 14.10 寻找Internet Explorer的cookie 519 14.11 生成OPML文件 521 14.12 聚合RSS Feed 524 14.13 通过模板将数据放入Web页面 527 14.14 在Nevow中呈现任意对象 530 第15章 分布式编程 534 引言 534 15.1 实现一个XML-RPC方法调用 536 15.2 服务XML-RPC请求 537 15.3 在Medusa中使用XML-RPC 539 15.4 允许XML-RPC服务被远程终止 541 15.5 SimpleXMLRPCServer的一些细节 542 15.6 给一个XML-RPC服务提供一个wxPython GUI 544 15.7 使用Twisted的Perspective Broker 546 15.8 实现一个CORBA服务和客户 549 15.9 使用telnetlib执行远程登录 551 15.10 使用SSH执行远程登录 554 15.11 通过HTTPS验证一个SSL客户端 557 第16章 关于程序的程序 559 引言 559 16.1 验证字符串是否代表着一个合法的数字 564 16.2 导入一个动态生成的模块 565 16.3 导入一个名字在运行时被确定的模块 567 16.4 将参数和函数联系起来 568 16.5 组合函数 571 16.6 使用内建的Tokenizer给Python源码上色 572 16.7 合并和拆解Token 575 16.8 检查字符串是否有平衡的圆括号 577 16.9 在Python中模拟枚举 580 16.10 在创建列表推导时引用它自身 583 16.11 自动化py2exe将脚本编译成Windows可执行文件的过程 585 16.12 在UNIX中将主脚本和模块绑成一个可执行文件 587 第17章 扩展和嵌入 590 引言 590 17.1 实现一个简单的扩展类型 592 17.2 用Pyrex实现一个简单的扩展类型 597 17.3 在Python中使用C++库 598 17.4 调用Windows DLL的函数 601 17.5 在多线程环境中使用SWIG生成的模块 603 17.6 用PySequence_Fast将Python序列转为 C数组 604 17.7 用迭代器逐个访问Python序列的元素 608 17.8 从Python可调用的C函数中返回None 611 17.9 用gdb调试动态载入的C扩展 613 17.10 调试内存问题 614 第18章 算法 616 引言 616 18.1 消除序列中的重复 619 18.2 在保留序列顺序的前提下消除其中的重复 621 18.3 生成回置采样 625 18.4 生成无回置的抽样 626 18.5 缓存函数的返回值 627 18.6 实现一个FIFO容器 629 18.7 使用FIFO策略来缓存对象 631 18.8 实现一个Bag(Multiset)收集类型 634 18.9 在Python模拟三元操作符 637 18.10 计算素数 640 18.11 将整数格式化为二进制字符串 642 18.12 以任意数为基将整数格式化为字符串 644 18.13 通过法雷分数将数字转成有理数 646 18.14 带误差传递的数学计算 648 18.15 以最大精度求和 651 18.16 模拟浮点数 653 18.17 计算二维点集的凸包和直径 656 第19章 迭代器和生成器 660 引言 660 19.1 编写一个类似range的浮点数递增的函数 663 19.2 从任意可迭代对象创建列表 665 19.3 生成Fibonacci序列 667 19.4 在多重赋值中拆解部分项 669 19.5 自动拆解出需要的数目的项 670 19.6 以步长n将一个可迭代对象切成n片 672 19.7 通过重叠窗口循环序列 674 19.8 并行地循环多个可迭代对象 678 19.9 循环多个可迭代对象的矢量积 680 19.10 逐段读取文本文件 683 19.11 读取带有延续符的行 685 19.12 将一个数据块流处理成行流 687 19.13 用生成器从数据库中抓取大记录集 688 19.14 合并有序序列 690 19.15 生成排列、组合以及选择 694 19.16 生成整数的划分 696 19.17 复制迭代器 697 19.18 迭代器的前瞻 701 19.19 简化队列消费者线程 703 19.20 在另一个线程中运行迭代器 705 19.21 用itertools.groupby来计算汇总报告 706 第20章 描述符、装饰器和元类 710 引言 710 20.1 在函数调用中获得常新的默认值 712 20.2 用嵌套函数来编写property属性 715 20.3 给属性值起别名 717 20.4 缓存属性值 719 20.5 用同一个方法访问多个属性 722 20.6 封装一个方法来给类增加功能 723 20.7 增强所有方法来给类增加功能 726 20.8 在运行时给一个类实例添加方法 728 20.9 检查接口的实现 730 20.10 在自定义元类中正确地使用_ _new_ _和_ _init_ _ 732 20.11 允许对List的可变方法的链式调用 734 20.12 通过更紧凑的语法使用协作的超类调用 736 20.13 不使用_ _init_ _来初始化实例属性 738 20.14 实例属性的自动初始化 740 20.15 重新加载时自动更新类实例 743 20.16 在编译时绑定常量 747 20.17 解决元类冲突 752
越的访问速度和负载能力 Discuz! 从创立之初即以提高产品效率为突破口,随着编译模板,语法生成内核,数据缓存和自动更新机制等独创或独有技术的应用,和坚固的数据结构及最少化数据库查询设计,使得 Discuz! 可以在极为繁忙的服务器环境下快速稳定运行,切实节约企业成本,提升企业形象。 强大而完善的功能 除了一般论坛所具有的功能外, Discuz! 还提供了很大限度的个性化设定。众多功能在后台预留开关,可按企业需要启用。前台全部采用编译模板技术构建,更换界面易如反掌。完善的权限设定,使管理员可控制到每个用户,每个组及所在每个分论坛的各种权限。 国际化和标准化的产品架构 目前发布的版本分为简体中文,繁体中文和英文三个版本。自 Discuz! 2.0 以来,因其高效国际化内核的应用,使其成功走出国门,步入海外市场,商业客户遍及中国大陆,香港,台湾,北美,欧洲,澳洲,马来西亚等国家和地区。 周密的安全部署和攻击防护 Discuz! 能有效处理页面格式,保证页面及表格的完整性。安全检查应用于每一个 Discuz! 代码中,可自动屏蔽贴子及签名等中的恶意代码和跨站脚本攻击。独有的全程操作记录,使论坛运行情况随时有据可查。 持久的创新和广阔的前景 Discuz! 拥有一支富于创新的开发队伍,持续性的技术优势和不断增长的市场经验,除了强化已有的市场竞争力以外,更增强了已有和潜在客户的信心,我们并不满足于现有成果,我们时刻关注国内外相关领域内的最新进展和动态,不断的进步和创新,已使越来越多的人相信 Discuz! 辉煌的明天。 操作系统要求 Discuz! 具备跨平台特性,可以运行于 Linux/FreeBSD/Unix 及微软 Windows 2000/2003 等各种操作系统环境下。我们已在软件中针对上述操作系统做了大量的测试和实地检验,保证 Discuz! 可以在上述系统中安全稳定的运行,但您仍然需要做好服务器操作系统级的安全防备措施,例如Windows用户需更改 MySQL for Windows 的初始 root 密码,避免跨目录的文件读写。类 Unix 用户需避免使用过于简单的密码,避免跨用户目录的文件读写,做好服务器上其他相关软件(如 Sendmail、ftpd、httpd)等的安全防范,使用较新的软件版本等。 如果您租用虚拟主机,一般正规和技术力量较强的虚拟主机提供商会已经做好操作系统的各项准备,用户可不必关注此部分。 推荐使用 Linux/FreeBSD 操作系统,不仅完全免费,而且可以获得更好的稳定性和负载能力。如果使用Windows 系统,请将 PHP 以 ISAPI(非 CGI)方式安装。 语言及数据库支撑环境要求 Discuz! 需要服务器上装有如下软件: 可用的httpd服务器(如 Apache、Zeus、IIS 等) PHP 4.1.0 及以上 Zend Optimizer 2.5.7 及以上 MySQL 3.23 及以上(仅针对 MySQL 版 Discuz! ) 以上软件除了 httpd 软件有可能需要购买以外,其余均为跨平台的免费软件,推荐使用以上软件的最新稳定版本,不仅拥有更多的功能,而且通常已修复了已知老版本的安全漏洞。 如果您租用虚拟主机,请咨询虚拟主机提供商,您的空间服务器是否已安装了上述软件。由于 Discuz! 的数据表具有前缀设计,因此通常情况下可以将 Discuz! 与其他软件安装在同一个数据库中,或采用不同的前缀名从而在同一个数据库中安装多个 Discuz! 论坛而不产生冲突。 您的 MySQL 数据库账号应当拥有 CREATE、DROP、ALTER等执行权限,同时文件空间需不低于 2M,数据库空间不低于 5M,通常您的虚拟空间都会满足这个条件,以满足包括 Discuz! 在内的绝大多数网络软件的正常运行。如果您不了解具体情况,请咨询您的空间提供商。 Discuz! 7.0.0 更新日志 【全新】社区 UI 设计,开创性操作引导和页面布局,大幅度提升会员使用体验 【全新】风格模板体系,打造个性化论坛风格更容易,论坛展现效果更突出 【全新】论坛风格可视化编辑器,支持在线设计风格,可实时预览设计效果 【全新】论坛风格管理系统,风格安装、卸载一键完成,支持风格效果图 【内置】16 款精心设计的炫酷风格和 7 套模板,供各种类型的站点选用,个性十足 【全新】论坛任务系统,进一步增强社区会员的互动行为,可利用任务增强社区的粘性、增加活跃度 【内置】会员类、帖子类、红包类、推广类、头像类 5 种论坛任务,轻松设计各种论坛任务 【支持】任务衍生,每类任务可根据申请条件、完成条件、奖励内容衍生出无数种任务 【支持】自定义任务脚本,内置自定义任务的安装、升
禅道项目管理软件6.2.stable版本于8月27日正式发布,该版本主要细节方面的调整。调整并优化测试流程,修复Bug,提高系统安全性。使用lazarus重构windows一键安装包的控制面板 。 修改记录 完成的功能: 1429 把ajaxform超时的时间拿出来作为参数。 481 增加是否需要打开审核流程的配置 1254 修改打包脚本,去掉内网服务器 984 命令行中的IN_SHELL常量改用PHP_SAPI 1322 dao类增加一个方法,可以允许用户直接执行一个sql。例如:$bugs = $this->dao->query('select * from zt_bug')->fetchAll(); 1173 维护权限的时候应该显示当前维护的分组 1422 删除用不到的js控件 357 dao增加count(*)的功能。 例如:$count = $this->dao->select('*')-from(TABLE_BUG)->where('status')->eq('normal')->count(); 1235 项目中新增需求时默认无需评审 1165 整理每个页面的标题和position 1207 发布关联bug的时候,不关联解决方案等于延期的bug 1371 项目的日志里面记录版本的创建时间和测试任务的提交,完成时间。 1436 快速跳转部分去掉圆角 808 任务增加暂停状态 1114 用例执行失败的时候,可以考虑分步骤提交bug。 1349 批量新增bug增加“同上”功能 1432 去掉发布和版本里面的“已关联bugs”中的复数s。 1055 查看组织日志/TODO时,横向滚动时,锁定前两列的部门及员工姓名。 1337 bug创建的时候增加优先级字段 1182 计划关联需求时增加按照模块搜索功能 1428 任务详情页面显示需求的描述。 981 调整各个对象编辑页面的标题文本框的排版 1395 添加动态中动作的中文支持 315 设定编辑器tabindex 1439 调整转入任务时项目列表的算法 1217 关于录入工时更新任务的状态 1125 当需求,任务,bug的管理或者解决方案为重复的时候,增加搜索功能。 1369 重新梳理下邮件错误的提示。 1348 查看版本关联bug弹出的页面增加操作按钮 1193 项目转入bug作为任务的时候将延期的也放在列表中 1431 调整各个新增页面的间距,将其缩小。 1262 在项目的下拉菜单中增加所有项目的链接 1324 使用lazarus重构windows一键安装包的控制面板 1175 搜索,计划应该按照日期倒序排 1424 产品页面提需求时如果不需要评审给用户提示评审人会变成指派人 1238 提需求时所属计划列表倒序排序 1320 重置数据之后,应当提示用户结果 1169 需求的详情页显示项目 1210 集成环境首页的自动跳转去掉 1394 6.0版本更换主题后,指派列表调整对比度,使用户更容易识别内容 1438 检查确认编辑器贴图功能是否正常 855 各个列表页面增加不同状态颜色的显示 1124 重新实现dao里面的检查字符串长度的计算方式 1359 项目导入bug的时候,自动计算模块 1199 linux一键安装包的控制脚本初始化对xampp变量的设置 1434 调整产品各个操作的界面。 1347 一键安装包首页居中对齐。 1430 模块的编辑,无法编辑名称。 483 各个列表页面默认不显示已经关闭的对象 1256 对表单提交过来的字段进行specialchars处理。 1022 添加需求,任务,bug,文档的时候判断是否重复。 1237 任务记录工时的时候在表zt_taskestimate中记录account属性的值 905 文档可以修改其所属的文档库 1167 邮件配置参数中过滤空格字符 1208 项目中bug列表的优先级还是用图标来显示 1437 调整桌面提醒工具权限错误的提示 1358 计划列表页面描述里面P标签的margin去掉。 1433 调整项目各个操作的界面。 1343 从用例创建bug的时候,可以选择步骤。 1057 重新梳理默认的权限列表 1183 调整两个日期选择框同时存在情况下第二个的默认值 修复的BUG: 598 6.0测试任务中查看用例结果版本信息为空 608 bug导入任务后更新任务(或bug)的状态时页面没有跳转 610 维护项目文档库的模块时把产品的模块也复制过来了 611 燃尽图的delta功能失效 622 用例批量创建需求下拉菜单无内容 618 权限管理页面去掉Bug自定义 下载地址 一、禅道项目管理软件源码下载 下载站点1:http://sourceforge.net/projects/zentao/files/6.2/ZenTaoPMS.6.2.stable.zip/download 下载站点2:http://dl.zentao.net/6.2/ZenTaoPMS.6.2.stable.zip 二、集成运行环境下载:切勿下载下面的软件进行升级,仅适用于新安装 Windows一键安装包(适用于windows系列) 下载站点1:http://sourceforge.net/projects/zentao/files/6.2/ZenTaoPMS.6.2.stable.exe/download 下载站点2:http://dl.zentao.net/6.2/ZenTaoPMS.6.2.stable.exe Linux一键安装包 32位: 下载站点1:http://sourceforge.net/projects/zentao/files/6.2/ZenTaoPMS.6.2.stable.linux-32.7z/download 下载站点2:http://dl.zentao.net/6.2/ZenTaoPMS.6.2.stable.linux-32.7z 64位: 下载站点1:http://sourceforge.net/projects/zentao/files/6.2/ZenTaoPMS.6.2.stable.linux-64.7z/download 下载站点2:http://dl.zentao.net/6.2/ZenTaoPMS.6.2.stable.linux-64.7z 安装和升级文档 安装文档:http://www.zentao.net/book/zentaopmshelp/40.html 升级文档:http://www.zentao.net/book/zentaopmshelp/41.html

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值