当前位置:   article > 正文

Windows操作系统安全加固基线检测脚本

安全基线 脚本

一.背景信息

     在我们的安全运维工作中经常需要进行安全基线配置和检查,所谓的安全基线配置就是系统的最基础的安全配置,安全基线检查涉及操作系统、中间件、数据库、甚至是交换机等网络基础设备的检查,面对如此繁多的检查项,自动化的脚本可以帮助我们快速地完成基线检查的任务,如下为基线检测脚本具体的内容,供大家学习参考

二.基线检测脚本

  1. <#
  2. # Windows操作系统安全加固基线检测脚本
  3. #>
  4. $PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
  5. $data = @{"project"=@()}
  6. secedit /export /cfg config.cfg /quiet
  7. #guest停用策略
  8. $config = Get-Content -path config.cfg
  9. for ($i=0; $i -lt $config.Length; $i++)
  10. {
  11. $config_line = $config[$i] -split "="
  12. if(($config_line[0] -eq "EnableGuestAccount ")){
  13. $config_line[1] = $config_line[1].Trim(' ')
  14. if($config_line[1] -eq "1")
  15. {
  16. $data.code = "1"
  17. $projectdata = @{"msg"="guest账户停用策略符合标准";}
  18. $data['project']+=$projectdata
  19. }
  20. else
  21. {
  22. $data.code = "0"
  23. $projectdata = @{"msg"="guest账户停用策略不符合标准";}
  24. $data['project']+=$projectdata
  25. }
  26. }
  27. }
  28. #guest重命名策略
  29. $config = Get-Content -path config.cfg
  30. for ($i=0; $i -lt $config.Length; $i++)
  31. {
  32. $config_line = $config[$i] -split "="
  33. if(($config_line[0] -eq "NewGuestName "))
  34. {
  35. $config_line[1] = $config_line[1].Trim(' ')
  36. if($config_line[1] -eq "Guest")
  37. {
  38. $data.code = "1"
  39. $projectdata = @{"msg"="guest账户重命名策略符合标准";}
  40. $data['project']+=$projectdata
  41. }
  42. else
  43. {
  44. $data.code = "0"
  45. $projectdata = @{"msg"="guest账户重命名策略不符合标准";}
  46. $data['project']+=$projectdata
  47. }
  48. }
  49. }
  50. #密码复杂性策略
  51. $config = Get-Content -path config.cfg
  52. for ($i=0; $i -lt $config.Length; $i++)
  53. {
  54. $config_line = $config[$i] -split "="
  55. if(($config_line[0] -eq "PasswordComplexity "))
  56. {
  57. $config_line[1] = $config_line[1].Trim(' ')
  58. if($config_line[1] -eq "1")
  59. {
  60. $data.code = "1"
  61. $projectdata = @{"msg"="密码复杂性策略符合标准";}
  62. $data['project']+=$projectdata
  63. }
  64. else
  65. {
  66. $data.code = "0"
  67. $projectdata = @{"msg"="密码复杂性策略不符合标准";}
  68. $data['project']+=$projectdata
  69. }
  70. }
  71. }
  72. #密码长度最小值策略
  73. $config = Get-Content -path config.cfg
  74. for ($i=0; $i -lt $config.Length; $i++)
  75. {
  76. $config_line = $config[$i] -split "="
  77. if(($config_line[0] -eq "MinimumPasswordLength "))
  78. {
  79. $config_line[1] = $config_line[1].Trim(' ')
  80. if($config_line[1] -ge "8")
  81. {
  82. $data.code = "1"
  83. $projectdata = @{"msg"="密码最小值策略符合标准";}
  84. $data['project']+=$projectdata
  85. }
  86. else
  87. {
  88. $data.code = "0"
  89. $projectdata = @{"msg"="密码最小值策略不符合标准";}
  90. $data['project']+=$projectdata
  91. }
  92. }
  93. }
  94. #密码最长使用期限策略
  95. $config = Get-Content -path config.cfg
  96. for ($i=0; $i -lt $config.Length; $i++)
  97. {
  98. $config_line = $config[$i] -split "="
  99. if(($config_line[0] -eq "MaximumPasswordAge "))
  100. {
  101. $config_line[1] = $config_line[1].Trim(' ')
  102. if($config_line[1] -le "90")
  103. {
  104. $data.code = "1"
  105. $projectdata = @{"msg"="密码最长使用期限策略符合标准";}
  106. $data['project']+=$projectdata
  107. }
  108. else
  109. {
  110. $data.code = "0"
  111. $projectdata = @{"msg"="密码最长使用期限策略不符合标准";}
  112. $data['project']+=$projectdata
  113. }
  114. }
  115. }
  116. #账户锁定阀值策略
  117. $config = Get-Content -path config.cfg
  118. for ($i=0; $i -lt $config.Length; $i++)
  119. {
  120. $config_line = $config[$i] -split "="
  121. if(($config_line[0] -eq "LockoutBadCount "))
  122. {
  123. $config_line[1] = $config_line[1].Trim(' ')
  124. if($config_line[1] -le "5")
  125. {
  126. $data.code = "1"
  127. $projectdata = @{"msg"="账户锁定阀值策略符合标准";}
  128. $data['project']+=$projectdata
  129. }
  130. else
  131. {
  132. $data.code = "0"
  133. $projectdata = @{"msg"="账户锁定阀值策略不符合标准";}
  134. $data['project']+=$projectdata
  135. }
  136. }
  137. }
  138. #账户锁定时间策略
  139. $config = Get-Content -path config.cfg
  140. for ($i=0; $i -lt $config.Length; $i++)
  141. {
  142. $config_line = $config[$i] -split "="
  143. if(($config_line[0] -eq "ResetLockoutCount "))
  144. {
  145. $config_line[1] = $config_line[1].Trim(' ')
  146. if($config_line[1] -ge "10")
  147. {
  148. $data.code = "1"
  149. $projectdata = @{"msg"="账户锁定时间策略符合标准";}
  150. $data['project']+=$projectdata
  151. }
  152. else
  153. {
  154. $data.code = "0"
  155. $projectdata = @{"msg"="账户锁定时间策略不符合标准";}
  156. $data['project']+=$projectdata
  157. }
  158. }
  159. }
  160. #关闭系统仅Administrator策略
  161. $config = Get-Content -path config.cfg
  162. for ($i=0; $i -lt $config.Length; $i++)
  163. {
  164. $config_line = $config[$i] -split "="
  165. if(($config_line[0] -eq "ResetLockoutCount "))
  166. {
  167. $config_line[1] = $config_line[1].Trim(' ')
  168. if($config_line[1] -ge "10")
  169. {
  170. $data.code = "1"
  171. $projectdata = @{"msg"="账户锁定时间策略符合标准";}
  172. $data['project']+=$projectdata
  173. }
  174. else
  175. {
  176. $data.code = "0"
  177. $projectdata = @{"msg"="账户锁定时间策略不符合标准";}
  178. $data['project']+=$projectdata
  179. }
  180. }
  181. }
  182. #操作系统远程关机策略安全
  183. $config = Get-Content -path config.cfg
  184. for ($i=0; $i -lt $config.Length; $i++)
  185. {
  186. $config_line = $config[$i] -split "="
  187. if(($config_line[0] -eq "SeRemoteShutdownPrivilege "))
  188. {
  189. $config_line[1] = $config_line[1].Trim(' ')
  190. if($config_line[1] -eq "*S-1-5-32-544")
  191. {
  192. $data.code = "1"
  193. $projectdata = @{"msg"="操作系统远程关机策略符合标准";}
  194. $data['project']+=$projectdata
  195. }
  196. else
  197. {
  198. $data.code = "0"
  199. $projectdata = @{"msg"="操作系统远程关机策略不符合标准";
  200. }
  201. $data['project']+=$projectdata
  202. }
  203. }
  204. }
  205. #操作系统本地关机策略安全
  206. $config = Get-Content -path config.cfg
  207. for ($i=0; $i -lt $config.Length; $i++)
  208. {
  209. $config_line = $config[$i] -split "="
  210. if(($config_line[0] -eq "SeShutdownPrivilege "))
  211. {
  212. $config_line[1] = $config_line[1].Trim(' ')
  213. if($config_line[1] -eq "*S-1-5-32-544")
  214. {
  215. $data.code = "1"
  216. $projectdata = @{"msg"="操作系统本地关机策略符合标准";}
  217. $data['project']+=$projectdata
  218. }
  219. else
  220. {
  221. $data.code = "0"
  222. $projectdata = @{"msg"="操作系统本地关机策略不符合标准";}
  223. $data['project']+=$projectdata
  224. }
  225. }
  226. }
  227. #取得文件或其他对象的所有权限策略
  228. $config = Get-Content -path config.cfg
  229. for ($i=0; $i -lt $config.Length; $i++)
  230. {
  231. $config_line = $config[$i] -split "="
  232. if(($config_line[0] -eq "SeProfileSingleProcessPrivilege "))
  233. {
  234. $config_line[1] = $config_line[1].Trim(' ')
  235. if($config_line[1] -eq "*S-1-5-32-544")
  236. {
  237. $data.code = "1"
  238. $projectdata = @{"msg"="取得文件或其他对象的所有权限策略符合标准";}
  239. $data['project']+=$projectdata
  240. }
  241. else
  242. {
  243. $data.code = "0"
  244. $projectdata = @{"msg"="取得文件或其他对象的所有权限策略不符合标准";}
  245. $data['project']+=$projectdata
  246. }
  247. }
  248. }
  249. #从网络访问此计算机策略
  250. $config = Get-Content -path config.cfg
  251. for ($i=0; $i -lt $config.Length; $i++)
  252. {
  253. $config_line = $config[$i] -split "="
  254. if(($config_line[0] -eq "SeNetworkLogonRight "))
  255. {
  256. $config_line[1] = $config_line[1].Trim(' ')
  257. if($config_line[1] -eq "*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551")
  258. {
  259. $data.code = "1"
  260. $projectdata = @{"msg"="从网络访问此计算机策略符合标准";}
  261. $data['project']+=$projectdata
  262. }
  263. else
  264. {
  265. $data.code = "0"
  266. $projectdata = @{"msg"="从网络访问此计算机策略不符合标准";}
  267. $data['project']+=$projectdata
  268. }
  269. }
  270. }
  271. #审核策略更改
  272. $config = Get-Content -path config.cfg
  273. for ($i=0; $i -lt $config.Length; $i++)
  274. {
  275. $config_line = $config[$i] -split "="
  276. if(($config_line[0] -eq "AuditSystemEvents "))
  277. {
  278. $config_line[1] = $config_line[1].Trim(' ')
  279. if($config_line[1] -eq "3")
  280. {
  281. $data.code = "1"
  282. $projectdata = @{"msg"="审核策略更改策略符合标准";}
  283. $data['project']+=$projectdata
  284. }
  285. else
  286. {
  287. $data.code = "0"
  288. $projectdata = @{"msg"="审核策略更改策略不符合标准";}
  289. $data['project']+=$projectdata
  290. }
  291. }
  292. }
  293. #审核登录事件
  294. $config = Get-Content -path config.cfg
  295. for ($i=0; $i -lt $config.Length; $i++)
  296. {
  297. $config_line = $config[$i] -split "="
  298. if(($config_line[0] -eq "AuditLogonEvents "))
  299. {
  300. $config_line[1] = $config_line[1].Trim(' ')
  301. if($config_line[1] -eq "3")
  302. {
  303. $data.code = "1"
  304. $projectdata = @{"msg"="审核登录事件策略符合标准";}
  305. $data['project']+=$projectdata
  306. }
  307. else
  308. {
  309. $data.code = "0"
  310. $projectdata = @{"msg"="审核登录事件不符合标准";}
  311. $data['project']+=$projectdata
  312. }
  313. }
  314. }
  315. #审核对象访问
  316. $config = Get-Content -path config.cfg
  317. for ($i=0; $i -lt $config.Length; $i++)
  318. {
  319. $config_line = $config[$i] -split "="
  320. if(($config_line[0] -eq "AuditObjectAccess "))
  321. {
  322. $config_line[1] = $config_line[1].Trim(' ')
  323. if($config_line[1] -eq "3")
  324. {
  325. $data.code = "1"
  326. $projectdata = @{"msg"="审核对象访问策略符合标准";}
  327. $data['project']+=$projectdata
  328. }
  329. else
  330. {
  331. $data.code = "0"
  332. $projectdata = @{"msg"="审核对象访问不符合标准";}
  333. $data['project']+=$projectdata
  334. }
  335. }
  336. }
  337. #审核进程跟踪
  338. $config = Get-Content -path config.cfg
  339. for ($i=0; $i -lt $config.Length; $i++)
  340. {
  341. $config_line = $config[$i] -split "="
  342. if(($config_line[0] -eq "AuditProcessTracking "))
  343. {
  344. $config_line[1] = $config_line[1].Trim(' ')
  345. if($config_line[1] -eq "2")
  346. {
  347. $data.code = "1"
  348. $projectdata = @{"msg"="审核进程跟踪策略符合标准";}
  349. $data['project']+=$projectdata
  350. }
  351. else
  352. {
  353. $data.code = "0"
  354. $projectdata = @{"msg"="审核进程跟踪策略不符合标准";}
  355. $data['project']+=$projectdata
  356. }
  357. }
  358. }
  359. #审核目录服务访问
  360. $config = Get-Content -path config.cfg
  361. for ($i=0; $i -lt $config.Length; $i++)
  362. {
  363. $config_line = $config[$i] -split "="
  364. if(($config_line[0] -eq "AuditDSAccess "))
  365. {
  366. $config_line[1] = $config_line[1].Trim(' ')
  367. if($config_line[1] -eq "3")
  368. {
  369. $data.code = "1"
  370. $projectdata = @{"msg"="审核目录服务访问策略符合标准";}
  371. $data['project']+=$projectdata
  372. }
  373. else
  374. {
  375. $data.code = "0"
  376. $projectdata = @{"msg"="审核目录服务访问策略不符合标准";}
  377. $data['project']+=$projectdata
  378. }
  379. }
  380. }
  381. #审核特权使用
  382. $config = Get-Content -path config.cfg
  383. for ($i=0; $i -lt $config.Length; $i++)
  384. {
  385. $config_line = $config[$i] -split "="
  386. if(($config_line[0] -eq "AuditPrivilegeUse "))
  387. {
  388. $config_line[1] = $config_line[1].Trim(' ')
  389. if($config_line[1] -eq "3")
  390. {
  391. $data.code = "1"
  392. $projectdata = @{"msg"="审核特权使用策略符合标准";}
  393. $data['project']+=$projectdata
  394. }
  395. else
  396. {
  397. $data.code = "0"
  398. $projectdata = @{"msg"="审核特权使用策略不符合标准";}
  399. $data['project']+=$projectdata
  400. }
  401. }
  402. }
  403. #审核系统事件
  404. $config = Get-Content -path config.cfg
  405. for ($i=0; $i -lt $config.Length; $i++)
  406. {
  407. $config_line = $config[$i] -split "="
  408. if(($config_line[0] -eq "AuditSystemEvents "))
  409. {
  410. $config_line[1] = $config_line[1].Trim(' ')
  411. if($config_line[1] -eq "3")
  412. {
  413. $data.code = "1"
  414. $projectdata = @{"msg"="审核系统事件策略符合标准";}
  415. $data['project']+=$projectdata
  416. }
  417. else
  418. {
  419. $data.code = "0"
  420. $projectdata = @{"msg"="审核系统事件策略不符合标准";}
  421. $data['project']+=$projectdata
  422. }
  423. }
  424. }
  425. #审核账户登录事件
  426. $config = Get-Content -path config.cfg
  427. for ($i=0; $i -lt $config.Length; $i++)
  428. {
  429. $config_line = $config[$i] -split "="
  430. if(($config_line[0] -eq "AuditAccountLogon "))
  431. {
  432. $config_line[1] = $config_line[1].Trim(' ')
  433. if($config_line[1] -eq "2")
  434. {
  435. $data.code = "1"
  436. $projectdata = @{"msg"="审核账户登录事件策略符合标准";}
  437. $data['project']+=$projectdata
  438. }
  439. else
  440. {
  441. $data.code = "0"
  442. $projectdata = @{"msg"="审核账户登录事件策略不符合标准";}
  443. $data['project']+=$projectdata
  444. }
  445. }
  446. }
  447. #审核账户管理
  448. $config = Get-Content -path config.cfg
  449. for ($i=0; $i -lt $config.Length; $i++)
  450. {
  451. $config_line = $config[$i] -split "="
  452. if(($config_line[0] -eq "AuditAccountManage "))
  453. {
  454. $config_line[1] = $config_line[1].Trim(' ')
  455. if($config_line[1] -eq "2")
  456. {
  457. $data.code = "1"
  458. $projectdata = @{"msg"="审核账户管理策略符合标准";}
  459. $data['project']+=$projectdata
  460. }
  461. else
  462. {
  463. $data.code = "0"
  464. $projectdata = @{"msg"="审核账户管理策略不符合标准";}
  465. $data['project']+=$projectdata
  466. }
  467. }
  468. }
  469. #暂停会话前所需的空闲时间
  470. $config = Get-Content -path config.cfg
  471. for ($i=0; $i -lt $config.Length; $i++)
  472. {
  473. $config_line = $config[$i] -split "="
  474. if(($config_line[0] -eq "MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\AutoDisconnect"))
  475. {
  476. $config_line = $config_line[1]
  477. $config_line = $config[$i] -split ","
  478. if($config_line[1] -le "30")
  479. {
  480. $data.code = "1"
  481. $projectdata = @{"msg"="暂停会话前所需的空闲时间策略符合标准";}
  482. $data['project']+=$projectdata
  483. }
  484. else
  485. {
  486. $data.code = "0"
  487. $projectdata = @{"msg"="暂停会话前所需的空闲时间策略不符合标准";}
  488. $data['project']+=$projectdata
  489. }
  490. }
  491. }
  492. #是否启用NTP服务同步时钟
  493. $Key = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer'
  494. $Name = 'Enabled'
  495. $config = (Get-ItemProperty -Path "Registry::$Key" -ErrorAction Stop).$Name
  496. if($config -eq "1")
  497. {
  498. $data.code = "1"
  499. $projectdata = @{"msg"="启用NTP服务同步时钟策略符合标准";}
  500. $data['project']+=$projectdata
  501. }
  502. else
  503. {
  504. $data.code = "0"
  505. $projectdata = @{"msg"="启用NTP服务同步时钟策略不符合标准";}
  506. $data['project']+=$projectdata
  507. }
  508. #检测开机启动项
  509. $Key = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run'
  510. $result = (Get-ItemProperty -Path "Registry::$Key" -ErrorAction Stop)
  511. $projectdata = @{"msg"="开机启动项为:$($result)";}
  512. $data['project']+=$projectdata
  513. #检查关闭默认共享盘
  514. $Key = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa'
  515. $Name = 'restrictanonymous'
  516. $config = (Get-ItemProperty -Path "Registry::$Key" -ErrorAction Stop).$Name
  517. if($config -eq "1")
  518. {
  519. $data.code = "1"
  520. $projectdata = @{"msg"="关闭默认共享盘策略符合标准";}
  521. $data['project']+=$projectdata
  522. }
  523. else
  524. {
  525. $data.code = "0"
  526. $projectdata = @{"msg"="关闭默认共享盘策略不符合标准";}
  527. $data['project']+=$projectdata
  528. }
  529. #禁止全部驱动器自动播放
  530. $Key = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer'
  531. $name = "NoDriveTypeAutoRun"
  532. $config = (Get-ItemProperty -Path "Registry::$Key" -ErrorAction Stop).$name
  533. if($config -eq "255")
  534. {
  535. $data.code = "1"
  536. $projectdata = @{"msg"="禁止全部驱动器自动播放符合标准";}
  537. $data['project']+=$projectdata
  538. }
  539. else
  540. {
  541. $data.code = "0"
  542. $projectdata = @{"msg"="禁止全部驱动器自动播放不符合标准";}
  543. $data['project']+=$projectdata
  544. }
  545. #应用日志查看器大小设置
  546. $Key = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application'
  547. $name = "MaxSize"
  548. $config = (Get-ItemProperty -Path "Registry::$Key" -ErrorAction Stop).$name
  549. if($config -ge "8192")
  550. {
  551. $data.code = "1"
  552. $projectdata = @{"msg"="应用日志查看器大小设置策略符合标准";}
  553. $data['project']+=$projectdata
  554. }
  555. else
  556. {
  557. $data.code = "0"
  558. $projectdata = @{"msg"="应用日志查看器大小设置策略不符合标准";}
  559. $data['project']+=$projectdata
  560. }
  561. #系统日志查看器大小设置
  562. $Key = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\System'
  563. $name = "MaxSize"
  564. $config = (Get-ItemProperty -Path "Registry::$Key" -ErrorAction Stop).$name
  565. if($config -ge "8192")
  566. {
  567. $data.code = "1"
  568. $projectdata = @{"msg"="系统日志查看器大小设置策略符合标准";}
  569. $data['project']+=$projectdata
  570. }
  571. else
  572. {
  573. $data.code = "0"
  574. $projectdata = @{"msg"="系统日志查看器大小设置策略不符合标准";}
  575. $data['project']+=$projectdata
  576. }
  577. #安全日志查看器大小设置
  578. $Key = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security'
  579. $name = "MaxSize"
  580. $config = (Get-ItemProperty -Path "Registry::$Key" -ErrorAction Stop).$name
  581. if($config -ge "8192")
  582. {
  583. $data.code = "1"
  584. $projectdata = @{"msg"="安全日志查看器大小设置策略符合标准";}
  585. $data['project']+=$projectdata
  586. }
  587. else
  588. {
  589. $data.code = "0"
  590. $projectdata = @{"msg"="安全日志查看器大小设置策略不符合标准";}
  591. $data['project']+=$projectdata
  592. }
  593. #屏幕自动保护程序
  594. $Key = 'HKEY_CURRENT_USER\Control Panel\Desktop'
  595. $name = "ScreenSaveActive"
  596. $config = (Get-ItemProperty -Path "Registry::$Key" -ErrorAction Stop).$name
  597. if($config -eq "1")
  598. {
  599. $data.code = "1"
  600. $projectdata = @{"msg"="屏幕自动保护程序策略符合标准";}
  601. $data['project']+=$projectdata
  602. }
  603. else
  604. {
  605. $data.code = "0"
  606. $projectdata = @{"msg"="屏幕自动保护程序策略不符合标准";}
  607. $data['project']+=$projectdata
  608. }
  609. #屏幕保护程序启动时间
  610. $Key = 'HKEY_CURRENT_USER\Control Panel\Desktop'
  611. $name = "ScreenSaveTimeOut"
  612. $config = (Get-ItemProperty -Path "Registry::$Key" -ErrorAction Stop).$name
  613. if($config -le "600")
  614. {
  615. $data.code = "1"
  616. $projectdata = @{"msg"="屏幕保护程序启动时间策略符合标准";}
  617. $data['project']+=$projectdata
  618. }
  619. else
  620. {
  621. $data.code = "0"
  622. $projectdata = @{"msg"="屏幕保护程序启动时间策略不符合标准";}
  623. $data['project']+=$projectdata
  624. }
  625. #屏幕恢复时使用密码保护
  626. $Key = 'HKEY_CURRENT_USER\Control Panel\Desktop'
  627. $name = "ScreenSaveTimeOut"
  628. $config = (Get-ItemProperty -Path "Registry::$Key" -ErrorAction Stop).$name
  629. if($config -ge "1")
  630. {
  631. $data.code = "1"
  632. $projectdata = @{"msg"="屏幕恢复时使用密码保护策略符合标准";}
  633. $data['project']+=$projectdata
  634. }
  635. else
  636. {
  637. $data.code = "0"
  638. $projectdata = @{"msg"="屏幕恢复时使用密码保护策略不符合标准";}
  639. $data['project']+=$projectdata
  640. }
  641. #结果处理
  642. $date = Get-Date
  643. #$result = ""
  644. foreach ($i in $data.project){
  645. #$result += "{'msg':$($i.msg)},"
  646. echo "{'msg':[$($i.msg)]}"
  647. $i.msg >>jixian.txt
  648. }

三.执行脚本

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/775075
推荐阅读
相关标签
  

闽ICP备14008679号