Learn about Windows PowerShell
In this post:
Please Clarify This Script You Published Previously
Hey, Scripting Guy! I have a question about your Hey, Scripting Guy! post
Next we use the Get-Date cmdlet to retrieve the current date and time. We store this in a variable named $dte as seen here: $dte = get-date
Next we use the Get-Date cmdlet to retrieve the current date and time. We store this in a variable named $dte as seen here:
$dte = get-date
I understand that. You are storing the current date in a variable. So far so good. Then, a little bit later, you decide to turn the date into a string. This is what you said:
Now we want to turn the datetime object that was returned by the Get-Date cmdlet into a string.
We do? Why do we want to do that? I don't follow. But leaving that for a minute, you continue:
To do this, we use the tostring() method. When we have a string, we have something that looks like this: PS C:\> (get-date).tostring()12/12/2008 1:00:59 PM"
To do this, we use the tostring() method. When we have a string, we have something that looks like this:
PS C:\> (get-date).tostring()12/12/2008 1:00:59 PM"
Wait a sec...why did you not use $dte.ToString()?
-- MM
Hello MM,
Microsoft Scripting Guy Ed Wilson here. In this particular case, it would work. However, from a best practice standpoint, it would require a revision to the code.
The $dte variable is created in the previous function. Because the other function is calling the previous function, it means that variables created within that function will be available to the following function. I do not like to rely on that because it makes the code more difficult to read and to troubleshoot. Therefore, when I plan to use a variable from a calling function I like to make sure that I actually pass the variable as a parameter to the called function—and I like to use the same variable names if possible.
However, you are correct. In this case, the $dte variable was available and could have been used. Why did I convert the date to a string? Because I was using regular expressions to create a particular pattern for the file names. The pattern was a requirement from the originator of the original e-mail question.
How Can I Report a Bug I Found in the Windows PowerShell ISE?
Hey, Scripting Guy! I love the Microsoft TechNet Script Center, but there is one bit of information I cannot find. How do I report a bug that I’ve found in the Windows PowerShell ISE?
-- PC
Hello PC,
I just checked with one of the PMs, and he says you can use the Microsoft Windows PowerShell connect site to file a bug on Windows Windows PowerShell or on the Windows PowerShell ISE. You can see in the following image that you can browse the bugs that have been submitted, report a bug, or submit a suggestion:
In most cases, you should browse the list of reported bugs before submitting a new bug because you can see the status of the bug. The bug status page is shown here:
The bugs will be listed as “Active” or “Closed.” If the bug is “Closed,” it might be fixed or marked as “By design,” which means that the behavior seen is the way Windows PowerShell or the Windows PowerShell ISE was designed to behave. If your bug is marked as “Closed by Design,” you could submit a feature request to request that the design be changed. If your feature request is accepted, it will be put on the work list for the next version of Windows PowerShell, which is version 3.0. We are currently accepting requests for features for Windows PowerShell 3.0, and now is the time to get those feature requests in.
How Can I Close an Open Folder on a Network Drive?
Hey, Scripting Guy! I’m using scripting to remove and map network drives. However, this does not work if the drive I am trying to map to is currently open. I’m looking for code to close an open folder on drive X: even if it’s opened to a subfolder. Do you have any ideas?
-- DB
Hello DB,
Here is the answer from Michael Frommhold, one of our PFEs (thanks, Michael):
Check out the subroutine Sub CheckDrive in the sample below. The Sub CheckDrive uses the WMI Class Win32_Networkconnection to query for existing connections on the same drive letter or for any connection to the same remote path on any drive letter. If the drive letter is already in use, the connection will be terminated. If the remote path is already connected, the connection will also be terminated.
CheckForOpenConnectionToFolderCloseConnectionAndDisconnectDrive.vbs
Dim oWSH Set oWSH = CreateObject("WScript.Network")Const cPath = "\\Server\share"Const cDrive = "Y:"Dim blDriveConnected blDriveConnected = FalseDim blPathConnected blPathConnected = FalseDim sDoubleDrive sDoubleDrive = vbNullString CheckDrive cDrive, cPath, blDriveConnected, blPathConnected, sDoubleDriveIf blDriveConnected Then oWSH.RemoveNetworkDrive cDrive, True, TrueIf blPathConnected And Not (LCase(cDrive) = LCase(sDoubleDrive)) Then oWSH.RemoveNetworkDrive sDoubleDrive, True, TrueoWSH.MapNetworkDrive cDrive, cPathSub CheckDrive(ByVal sDrive, _ ByVal sPath, _ ByRef blDrive, _ ByRef blPath, _ ByRef sPathDrive _ ) Dim oWMI Dim colItems Dim oItem Set oWMI = GetObject("winmgmts:\\.\root\CIMV2") Set colItems = oWMI.ExecQuery("SELECT LocalName, RemotePath FROM Win32_NetworkConnection") For Each oItem In colItems If oItem.LocalName = sDrive Then blDrive = True If (LCase(oItem.RemotePath) = LCase(sPath)) _ Or (InStr(LCase(oItem.RemotePath), LCase(sPath)) > 0) _ Or (InStr(LCase(sPath), LCase(oItem.RemotePath)) > 0) Then blPath = True sPathDrive = oItem.LocalName End If Next End Sub
Can I Automate the Scheduling of Offline File Tasks?
Hey, Scripting Guy! I am wondering if you could help me with a request that I have regarding offline files. I currently need to automate the process of creating the task to schedule offline files settings under Windows 7. The graphical user interface allows the user to configure these settings. I am talking about settings such as sync occurs on logout/unlock/interval. However, I cannot find a documented way of automatically generating these tasks be it via WMI (providers), Windows PowerShell, or an admin tool. Would you be able to help me with this request? I will greatly appreciate your help on this—it will mean glory or bust for me around the office.
-- FK
Hello FK,
Have you taken a look at the WMI Offline Files provider? The documentation for the WMI Offline Files provider on MSDN is quite extensive, and there is a decent amount of capability supplied via that provider. For example the WMI Class Win32_OfflineFilesCache has the methods that are listed in Table 1.
Table 1 Methods of the Win32_OfflineFilesCache WMI Class
Method
Description
Enable
Enables or disables the Offline Files feature.
RenameItem
Renames a path in the Offline Files cache.
Synchronize
Synchronizes one or more items.
Pin
Assures that an item will be available offline.
Unpin
Removes the assurance that an item will be available offline.
DeleteItems
Deletes one or more items from the Offline Files cache.
Encrypt
Encrypts or unencrypts files in the Offline Files cache.
SuspendRoot
Suspends or unsuspends a directory tree in the Offline Files cache.
TransitionOffline
Transitions an item offline if possible.
TransitionOnline
Transitions an item online if possible.
If, on the other hand, the WMI Offline Files provider will not do what you need, you must use the Offline Files API. Once again, the MSDN documentation will be your friend in guiding you through the API.
So, FK, you can use either the WMI provider or the Offline Files API from within Windows PowerShell 2.0. Using WMI to manage offline files is relatively easy. If it will do exactly what you need to do, it is definitely the way to go. Using the C++ native APIs from Windows PowerShell 2.0 can be done, but you must import the type library via the Add-Type cmdlet and it can be a bit tricky. However, the power and the flexibility offered from the API may be the way to go.
Well, this concludes another edition of Quick-Hits Friday. It also concludes another exciting week at the Script Center. Join us next week as we delve into the mysteries of…well, we will let that remain a mystery for now.
If you want to know exactly what we will be looking at on Monday, follow us on Twitter or Facebook. If you have any questions, send e-mail to us at scripter@microsoft.com or post your questions on the Official Scripting Guys Forum. See you on Monday. Until then, have an awesome weekend.
Ed Wilson and Craig Liebendorfer, Scripting Guys
Regarding the moving of offline files under windows 7 see blogs.technet.com/.../updating-your-offline-files-cache-in-windows-vista-to-point-to-a-new-server.aspx for a full functioning vb script.