2014-06-12 43 views
0

极端的PowerShell新手在这里。我感谢任何和所有的帮助。 我正在尝试将一个简单的防洪脚本放在一起,以便与Sharepoint/Powershell一起使用。需要查看字段中的日期时间并将其与当前日期时间进行比较,然后在最后提交的5秒内停止执行。现在使用的方法似乎总是评估为真。Powershell/Sharepoint反洪泛脚本

#get system datetime (output format - 06/12/2014 07:57:25) 
$a = (Get-Date) 


# Get current List Item 
$ListItem = $List.GetItemById($ItemID) 
$DateToCompare = $ListItem["baseline"].AddMilliseconds(5000) 

if ($DateToCompare -gt $a) 
    {Break} 


#set variable to field 
$ListItem["baseline"] = $a 


#write new item 
$ListItem.Update() 
Break 
+0

这是发生在循环内吗?那些断言陈述脱离了上下文。 – mjolinor

+0

否定的。如果IF语句的计算结果为false,则会发生写入操作。 – user3723688

+0

中断旨在用于循环或开关结构中。除此之外,我会使用Return来代替。 – mjolinor

回答

0

我没有Sharepoint访问权限,所以我无法完全测试。

您可以验证“基准”属性的数据类型吗?

($ListItem["baseline"]).getType().Name 

您确定真的要添加5000毫秒吗?

Write-Output "NOW: $($curDate) BASELINE: $($DateToCompare) DIFF: $(($curDate - $DateToCompare).TotalMilliseconds)" 

为什么使用break而不是让评估自然结束?以下是您可以用重构您的代码的替代方法。

#The difference in Milliseconds acceptable 
$threshold = 5000 

#Get current date, the formatting depends on what you have defined for output. 
$curDate = Get-Date 

#Get current list item from SP 
$listItem = $List.GetItemById($ItemID) 

# Get current List Item's baseline 
$DateToCompare = $listItem["baseline"] 

Write-Output "NOW: $($curDate) BASELINE: $($DateToCompare) DIFF: $(($curDate - $DateToCompare).TotalMilliseconds)" 

if (($curDate - $DateToCompare).TotalMilliseconds -le $threshold){ 

    #set variable to field 
    $ListItem["baseline"] = $curDate 

    #write new item 
    $ListItem.Update() 
} else { 
    #Outside of threshold 
} 
+0

所以事实证明,上面的脚本是功能性的。问题是我在(Get-Date)函数下拉的时间是服务器时间(中央),而不是当地时间(东部)。我会在8小时后发布最终代码,新用户,限制。 – user3723688

0

所以事实证明,我上面给出的脚本是功能性的。问题是我在(Get-Date)函数下拉的时间是服务器时间(中央),而不是当地时间(东部)。

#bring server time up to eastern time 
$a = (Get-Date).AddMilliseconds(7200000) 


# Get current List Item 
$ListItem = $List.GetItemById($ItemID) 

#take baseline time and add 5 seconds 
$DateToCompare = $ListItem["baseline"].AddMilliseconds(5000) 

#stop if script has run in the last 5 sec (loop prevention) 
if ($DateToCompare -gt $a) 
    {Break} 

#stop if the status hasnt changed 
if ($ListItem["baselinestatus"] -eq $ListItem["Status"]) 
    {Break} 

#get current activity status 
$currentstatus = $ListItem["Status"] 

#get current contents of log 
$log = $ListItem["Log"] 

#append new entry to existing and write it to the log 
$newentry = $log + "<br>" + $a + " - " + $currentstatus 

#set variable to field 
$ListItem["Log"] = $newentry 
$ListItem["baseline"] = $a 
$ListItem["baselinestatus"] = $currentstatus 


#write new item 
$ListItem.Update()