Earlier today I made a big goof. I opened a module in Notepad, intending to use it as the basis for a new module. I was in the process of using "File > Save As" when my phone rang just at the precise instant that, for some reason, made me click on "File > Save" by mistake. After hitting Ctrl+Z 30 times to try to get the old version of the module back, I remembered that Notepad has never had more than one level of Undo. Back when I was coding ASP by hand, I was very well aware of this, but I hadn't come across this situation in a long time, so I was a bit rusty.
I went back and forth with Aaron Nelson a bit on how to recover from this grave error, and I came across this gem, which I could run, thankfully, because I had several windows with the module already loaded:
$f = "FunctionName"; (Get-Command $f Show-List).Definition;
That let me see the original function on the screen, but I wanted it in a file so I wouldn't have to transcribe it. Easy enough:
$f = "FunctionName"; (Get-Command $f Show-List).Definition | Out-File -Append "C:\Aaron\Moron.txt";
If I had messed up more than one function in the module, I would have had to repeat this process multiple times; in this case, I had only touched a single function.
Just wanted to point out that little tip in case any of you ever find yourself in the same situation. (And, admittedly, so that I can easily find the command should I ever do this to myself again.)
Yes, I hear all of you screaming at me because I'm an idiot and I shouldn't be using Notepad. Yep, you're probably right. Just remember that we're not always working on our cozy little personal machines with all of our preferred tools and applications set up – sometimes we have to work when RDP'd into a server that we've never used before, and it is not always prudent to make it feel like home because, well, it's not.
Or "Previous Versions" if you're on Vista or 7.
Good save. But at least you could have dug it out of the Backups … you do have backups, right ?? 🙂
Yep. Like I said, out of the Notebook habit for several years. I learned a lot more from the save than from my bad practices.
Aaron – I'd suggest a habit of at least making a copy of the file first *before* opening it (i.e. the copy) in Notepad if you're going to save your changes as another copy anyways. Nice save though!
Still not sure how that helps. Does source control have some kind of quality check? No. I can write a script with an infinite loop and it will still do that whether or not I checked it into source control first. I'm not against source control, and I use it where appropriate. I just don't agree that you need to use it for every single line of code you write in your entire career.
Never the less, a source control system is always better than executing things directly on a customer's server… We try to do that only in real emergencies… 🙂
When I'm writing one-off and single-use PowerShell scripts on a client's system? No, I think source control would be overkill in a lot of these scenarios.
Hi
I'm not a scripter but, wouldn't be usefull and much better to use a version control sytem(e.g. SVN)?
I wrote a function for exporting functions (sounds chaotic I know) because you never know. This is a great example.
http://jdhitsolutions.com/blog/2010/07/export-function/
That's also why you should never use Notepad. 😉 At least use the ISE which does have some Undo functionality.
nice, one for the bookmarks!
Good info, but I'd likely try to see if I could run something like http://portableapps.com/apps/development/notepadpp_portable. I realize that's not always a possibility either, especially in cases like yours.
Thanks, Aaron! Great info. I hope I never need this, but you never know.
Joe