2014-06-12 8 views
0

Extreme powershell newbie 여기에. 나는 모든 도움에 감사드립니다. Sharepoint/Powershell을 사용하기 위해 간단한 대책 스크립트를 작성하려고합니다. 필드의 datetime을보고 현재 datetime과 비교 한 다음 마지막 submittal에서 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

루프 내부에서 그런 일이 발생 했습니까? 그 Break 문은 문맥을 보지 않습니다. – mjolinor

+0

음수. 거짓으로 평가되면 IF 문 다음에 발생하는 쓰기가 있습니다. – user3723688

+0

브레이크는 루프 또는 스위치 구조 내에서 사용하기위한 것입니다. 그 밖에서 나는 대신 Return을 사용할 것이다. – mjolinor

답변

0

나는 셰어 포인트 액세스 권한이 없으므로 완전히 테스트 할 수 없습니다.

"기준선"속성의 데이터 유형을 확인할 수 있습니까?

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

정말로 5000 밀리 초가 추가되고 있습니까?

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

평가를 자연스럽게 종료하는 대신 왜 휴식을 사용합니까? 다음은 대체 방법입니다. 코드를 재구성 할 수 있습니다.

#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()