小编Mat*_*nde的帖子

PowerShell脚本用于查询和删除早于"x"天的打印作业

我开始将这个PowerShell脚本放在一起,希望能够替换当前手动执行的一些任务

我正在使用

get-Date.AddDays()
Run Code Online (Sandbox Code Playgroud)

功能

我正在使用ISE来构建脚本,在测试中我得到输出,如果我挑出'starttime'属性,但这似乎是一个全部因为值都是null,理想情况下我想使用'timesubmitted'属性,但日期似乎输出奇怪,我认为没有正确读取,因为我的'timesubmitted'查询总是空的

如果你做一个打开的查询,它会以这种格式出现

20120416030836.778000-420
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所拥有的.

无视| 'format-table'函数就是这样我可以看到我是否得到了所需的输出

#Clears Old Print Jobs on Specified server

#Sets Execution Policy for Script to run
Set-ExecutionPolicy RemoteSigned -Force

#establishes variable for cutoff date
$d = Get-Date
$old = $d.AddDays(-4)

#Queries WMI and retrieves print jobs
Get-WmiObject -class win32_printjob -namespace "root\CIMV2" | where-object {$_.timesubmitted -lt
"$old"} | ft caption,document,jobid,jobstatus,owner,timesubmitted
Run Code Online (Sandbox Code Playgroud)

powershell powershell-ise

4
推荐指数
1
解决办法
6929
查看次数

批量WMIC重定向输出并包装到变量中

我正在尝试使用WMIC删除旧打印服务器上的旧打印机

如果我从命令行使用以下语法,它的工作原理

WMIC PRINTER WHERE"SERVERNAME LIKE'%% OLDSERVERNAME %%'"DELETE

我被问到是否可以让它更换打印机或更新它们以免帮助台获得"如何添加我的打印机"电话

我尝试使用SET的一些变体来设置SERVERNAME的属性,它似乎处理,但没有任何变化,并且执行GET仍然显示旧值.

所以我想我可以做一个FOR/F循环,在变量中包装打印机的名称(sharename),然后在删除违规打印机后使用另一个命令重新创建打印机.

这是我的剧本

@ECHO

ECHO Gathering Installed Printer Information...

FOR /F "tokens=1 skip=1" %%A IN ('WMIC PRINTER WHERE "Servername like "%%printaz1%%"" get sharename') DO SET PRINTERNAME=%%A

ECHO %PRINTERNAME%
Run Code Online (Sandbox Code Playgroud)

所以你会认为你得到的所有值都包含在一个很好的变量中,你可以根据自己的意愿去做,但是没有,我开启了回声,看起来这个变量一旦被捕获就会被设置回null

我的输出看起来像这样......

FOR /F "tokens=1 skip=1" %%A IN ('WMIC PRINTER WHERE "Servername like "%%printaz1%%"" get sharename') DO SET PRINTERNAME=%%A

SET PRINTERNAME=nameofprinter

SET PRINTERNAME=

ECHO

ECHO is on.
Run Code Online (Sandbox Code Playgroud)

我会喜欢一些关于为什么它似乎倾销字符串的想法.

Powershell和VBScript也不是不可选择的,我对两者都很熟悉,这似乎有可能,而且我真的不想重新开始.

wmi batch-file wmi-query wmic

2
推荐指数
1
解决办法
2万
查看次数

VBScript IF语句确定操作系统版本和ServicePack

我正在为Office 2010和其他几个应用程序编写部署脚本,我们在测试中遇到的一个问题是一些计算机仍然有XP SP2,所以我想为此编写一个安全措施.

我想出了这个

Set colOperatingSystem = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")

For Each objOperatingSystem in colOperatingSystem
ServicePack = objOperatingSystem.ServicePackMajorVersion
Next

IF not ServicePack = "3" Then

MsgBox "WARNING: prerequisite to installing Microsoft Office 2010 Professional you must first install service pack 3" & VbCrlf & "your current Service Pack Version is " & ServicePack

ELSE

'Do Nothing

END IF
Run Code Online (Sandbox Code Playgroud)

我将它插入XP SP2机器并获得警告弹出On_WindowLoad,所以我很高兴,但是当我将它插入我的Windows 7机器时,它会抛出相同的消息,挖掘一下powershell我意识到自从Windows 7报告它的ServicePackMajorVersion数字为"1",因此它不符合条件,

希望有人可能知道如何写一个IF /条件声明来绕过Windows 7 PC,我看了7601的内部版本号,但不知道如何嵌套这些

vbscript wmi

0
推荐指数
1
解决办法
9996
查看次数