2014-06-12 47 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()