2017-08-11 31 views
0

我想製作一個自動腳本,其中PowerShell腳本從文本文件中選擇一個名稱,然後刪除它選擇的名稱,以便它不重複發送給用戶。我承認我在PowerShell上沒有太多的經驗,目前只有一行代碼,但它將成爲代碼的其他代碼,我似乎無法在堆棧或谷歌的任何地方找到它,以獲得具體的答案。以下是我迄今爲止:查找文本文件中的隨機文本,然後在顯示它後刪除 - PowerShell

Get-Random -InputObject (Get-Content "F:\PowerShell\Name Library.txt") 

有沒有一種方法,使之暫時保存姓名幾秒鐘,然後從列表中刪除的名稱,然後刪除保存的名稱,以便第二天就可以從列表中挑選新的東西?

+0

「幾秒鐘」 - 爲什麼?爲什麼不立即刪除一個隨機線? –

+0

這可以工作,我只是想通過電子郵件獲取名稱並將其發送給用戶可能需要幾秒鐘? –

回答

1

我建議以下方法:

  1. 讀取文件到內存
  2. 選擇隨機線
  3. 發送電子郵件
  4. 覆蓋文件與其餘的行列表

莫非看起來像這樣:

# Read in the list: 
$ListOfNames = Get-Content "F:\PowerShell\Name Library.txt" 

# Split into two lists, one with a random line, one with the rest 
$Random,$Rest = $ListOfNames.Where({$_.ReadCount -eq ($ListOfNames.ReadCount |Get-Random)},'Split') 

# Send mail to $Random here 
# ... 

# Write remaining names back to file 
$Rest |Set-Content "F:\PowerShell\Name Library.txt" -Force 
+0

謝謝你的幫助:) –

0

只是添加到上面,我永遠不想永久刪除任何東西。所以,如果我工作的你在做什麼,我會創建一個對象,並將其存儲在一個文件

#You will only have to do this top section once, after that you will import the xml file created below to import the object 
#region Initial Import 
$ListOfNames = Get-Content C:\TEMP\test.txt 

$nameTracking = @() 
foreach($name in $ListOfNames) 
{ 
    $trackingObj = New-Object -TypeName psobject 
    $trackingObj | Add-Member -MemberType NoteProperty -Name Name -Value $name 
    $trackingObj | Add-Member -MemberType NoteProperty -Name EmailSent -Value $false 
    $trackingObj | Add-Member -MemberType NoteProperty -Name DateSent -Value $null 
    $nameTracking += $trackingObj 
} 
#endregion 

#After the xml file is created the first time you will execute the following to import the names: 
#$nameTracking = Import-Clixml -Path C:\temp\trackingSet.xml 

$Random = $nameTracking | where {$_.EmailSent -eq $false} | Get-Random 

# Send mail to $Random here, remember to access the name you'll have to use the property of $Random.Name 
Send-MailMessage <your parameters here> 

#Now set to the EmailSent/DateSent on the object 
($nameTracking | where {$_.name -eq $Random.Name}).EmailSent = $true 
($nameTracking | where {$_.name -eq $Random.Name}).DateSent = Get-Date 

$nameTracking | Export-Clixml -Path C:\temp\trackingSet.xml 

這個一個很好的事情太多就是你可以在屏幕上隨時打印的內容一個不錯的表物體。只需在導入XML後輸入$ nameTracking,然後您將得到一個包含每個用戶詳細信息的表格,如果他們收到了電子郵件以及它發送的日期。

您可以通過添加更多成員來包含您可能希望的信息來進一步改進此對象,您甚至可以將電子郵件地址與其中的人員姓名一起存儲以便更輕鬆地進行電子郵件收發。

相關問題