c# pdf viewer itextsharp : How to reorder pages in pdf online Library application API .net html azure sharepoint Windows%20Powershell%20in%20Action%202nd%20Edition62-part1519

590
CHAPTER 14
E
RRORS
AND
EXCEPTIONS
Type Content  StartLine StartColumn
---- -------  --------- -----------
Keyword function         1           1
CommandArgument abc              1          10
GroupStart (                1          14
GroupEnd )                1          15
GroupStart {                1          17
Command dir              1          18 
StatementSeparator ;                1          21
Operator +                1          24
Number 1                1          26
GroupEnd }                1          27
Because the text being tokenized is valid PowerShell script, no errors are generated. 
You do get a list of all the tokens in the text displayed on the screen. You can see that 
each token includes the type of the token, the content or text that makes up the 
token, as well as the start line and column number of the token. You’ll now wrap this 
code up into a function to make it easier to call; name the function 
Test-Script
:
PS (5) > function Test-Script ($script) 
>> { 
>>   $parse_errs = $null 
>>   $tokens = [system.management.automation.psparser]::Tokenize( 
>>   $script, 
>>     [ref] $parse_errs) 
>>   $parse_errs | Write-Error 
>>   $tokens 
>> } 
>>
Try it on a chunk of invalid script text:
PS (6) > Test-Script "function ($x) {$x + }" | 
>> ft -auto type,content,startline, startcolumn 
>>
Test-Script : System.Management.Automation.PSParseError 
At line:1 char:12 
+ Test-Script <<<<  "function ($x) {$x + }" |
+ CategoryInfo          : NotSpecified: (:) [Write-Error], Write
ErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErr
orException,Test-Script
Test-Script : System.Management.Automation.PSParseError 
At line:1 char:12 
+ Test-Script <<<<  "function ($x) {$x + }" |
+ CategoryInfo          : NotSpecified: (:) [Write-Error], Write
ErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErr
orException,Test-Script
Test-Script : System.Management.Automation.PSParseError 
At line:1 char:12 
+ Test-Script <<<<  "function ($x) {$x + }" |
How to reorder pages in pdf online - re-order PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Customizing Page Order of PDF Document in C# Project
moving pages in pdf; move pdf pages
How to reorder pages in pdf online - VB.NET PDF Page Move Library: re-order PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Sort PDF Document Pages Using VB.NET Demo Code
how to reorder pages in pdf preview; rearrange pages in pdf file
D
EBUGGING
WITH
THE
HOST
API
S
591
+ CategoryInfo          : NotSpecified: (:) [Write-Error], Write
ErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErr
orException,Test-Script
Type Content  StartLine StartColumn
---- -------  --------- -----------
Keyword function         1           1
GroupStart (                1          10
GroupEnd )                1          11
GroupStart {                1          13
Operator +                1          15
GroupEnd }                1          17
Now you see a number of errors. When you run a script that has syntax errors, you 
get just one error before the parsing continues. With the tokenizer 
API
, the parser 
tries to reset itself and continue. This means that you may be able to deal with more 
errors at one time, but the reset process doesn’t always work and sometimes you get 
incorrect errors. The other thing to notice is that, in the list of tokens being dis-
played, some of the actual tokens in the script, such as the variables, aren’t output. 
Again, this is because when the parser attempts to recover, it can get confused and 
miss  some  tokens.  (This  is  why,  when  you  just  run  a  script  you  only  get  one 
error—you know the first error is correct but aren’t sure about the rest. It’s simpler [if 
not more efficient] to deal with one correct error at a time rather than a collection of 
possible incorrect errors.)
Let’s rewrite the test function. You’re going to do a little work to clean up the errors, 
but you’ll also add a new static check. Because the tokenizer output tells you what 
tokens are commands, you can use 
Get-Command
to see if there are any references to 
commands that don’t exist. This won’t always be an error—a script may load a module 
defining the missing command at runtime—so you need to consider it to be a warning 
to investigate instead of an actual error. Here’s what the new script looks like:
PS (7) > function Test-Script ($script) 
>> { 
>>   $parse_errs = $null 
>>   $tokens = [system.management.automation.psparser]::Tokenize( 
>>     $script, 
>>     [ref] $parse_errs) 
>>   foreach ($err in $parse_errs) 
>>   { 
>>     "ERROR on line " + 
>>       $err.Token.StartLine + 
>>       ": " + $err.Message + 
>>       "`n" 
>>   } 
>>   foreach ($token in $tokens) 
>>   { 
>>     if ($token.Type -eq "Command") 
>>     { 
>>       $gcmerr = Get-Command $token.Content 2>&1
C# TIFF: How to Reorder, Rearrange & Sort TIFF Pages Using C# Code
Reorder, Rearrange and Sort TIFF Document Pages in C#.NET Application. C# TIFF Page Sorting Overview. Reorder TIFF Pages in C#.NET Application.
how to rearrange pdf pages reader; rearrange pages in pdf file
VB.NET PowerPoint: Sort and Reorder PowerPoint Slides by Using VB.
Sort and Reorder PowerPoint Slides Range with VB amount of robust PPT slides/pages editing methods powerful & profession imaging controls, PDF document, image
reorder pages of pdf; pdf page order reverse
592
CHAPTER 14
E
RRORS
AND
EXCEPTIONS
>>       if (! $? ) 
>>       { 
>>         "WARNING on line " + 
>>           $gcmerr.InvocationInfo.ScriptLineNumber + 
>>           ": " + $gcmerr.Exception.Message + 
>>           "`n" 
>>       } 
>>     } 
>>   } 
>> } 
>>
The first part of the script hasn’t changed much—you tokenize the string and then 
display any errors, though in a more compact form. Then you loop through all of the 
tokens looking for code commands. If you find a command, you check to see if it 
exists. If not, you display a warning. Let’s try it out. First, define the test script with 
expected errors and an undefined command:
PS (8) > $badScript = @' 
>> for ($a1 in nosuchcommand) 
>> { 
>>     while ( ) 
>>     $a2*3 
>> } 
>> '@ 
>>
Now run the test and see what you get:
PS (9) > Test-Script $badScript
ERROR on line 1: Unexpected token 'in' in expression or statement.
ERROR on line 1: Unexpected token 'nosuchcommand' in expression or 
statement.
ERROR on line 3: Missing expression after 'while' in loop.
ERROR on line 4: Missing statement body in while loop.
WARNING on line 18: The term 'nosuchcommand' is not recognized as 
the name of a cmdlet, function, script file, or operable program. Check 
the spelling of the name, or if a path was included, verify that the 
path is correct and try again.
In the output you see the expected syntax errors, but you also get a warning for the 
undefined command. There are a lot of things you could do to improve this checker. 
For example, you could look for variables that are used only once. By using these 
analysis techniques on the script text, you can find potential problems much sooner 
than you would if you waited to hit them at runtime.
So far we’ve looked at a number of tools and approaches that you can use to learn 
what’s wrong with your scripts. But how do you figure out what’s going on when 
other people are running your (or other people’s) scripts in a different environment,
Read PDF in Web Image Viewer| Online Tutorials
"This online guide content is Out Dated! Extract images from PDF documents; Add, reorder pages in PDF files; Save and print PDF as you wish;
how to move pages within a pdf; reverse page order pdf
C# PDF: C# Code to Process PDF Document Page Using C#.NET PDF
C# PDF Page Processing: Sort PDF Pages - online C#.NET tutorial page for how to reorder, sort, reorganize or re-arrange PDF document files using C#.NET code.
reorder pages in a pdf; rearrange pdf pages
C
APTURING
SESSION
OUTPUT
593
possibly at a remote location? To help with this, the PowerShell console host includes 
a session transcript mechanism. You’ll learn how this works in the next section.
14.4
C
APTURING
SESSION
OUTPUT
When trying to debug what’s wrong with someone’s script at a remote location, you’ll 
find extremely helpful the ability to see the output and execution traces from a script 
run. The PowerShell console host allows you to do this via a mechanism that captures 
console output in transcript files. This transcript capability is exposed through the 
Start-Transcript
and 
Stop-Transcript
cmdlets, shown in figure 14.17. 
NOTE
Unfortunately, the implementation of these cmdlets is a feature 
of the console host (
PowerShell.exe
) and so is not available in other 
hosts, including the PowerShell 
ISE
. But all is not lost—there’s a way to 
effectively achieve the equivalent with the 
ISE
, as you’ll see in the next 
chapter. Other host applications may have similar mechanisms.
14.4.1
Starting the transcript
To start a transcript, run 
Start-Transcript
as shown in the next example. Let’s 
begin the example by running a command before starting the transcript so you can 
see what is and is not recorded. Run 
Get-Date
to get the current date
PS (1) > Get-Date
Thursday, April 15, 2011 10:10:12 PM
and now start the transcript:
PS (2) > Start-Transcript 
Transcript started, output file is C:\Users\brucepay\Documents\ 
PowerShell_transcript.20100415221017.txt
Start-Transcript [[-Path] <string>] [-Append] [-Force] [-NoClobber]
Stop-Transcript
Turn off transcription
Turn on transcription
Specify path for 
transcript file instead
of using default
Append to file instead of
overwriting it
Force writing to file even
if it’s read-only 
If writable file already
exists, don’t overwrite it
Figure 14.17 The cmdlets to start and stop console transcription. When transcription is 
turned on, all output to the console is written to the transcript file.
VB.NET TIFF: Modify TIFF File by Adding, Deleting & Sort TIFF
Users can use it to reorder TIFF pages in ''' &ltsummary> ''' Sort TIFF document pages in designed powerful & profession imaging controls, PDF document, image
how to move pages around in a pdf document; pdf rearrange pages online
C# PDF Page Rotate Library: rotate PDF page permanently in C#.net
Online C# class source codes enable the ability to rotate single NET, add new PDF page, delete certain PDF page, reorder existing PDF pages and split
how to reorder pages in a pdf document; reordering pages in pdf
594
CHAPTER 14
E
RRORS
AND
EXCEPTIONS
Because you didn’t specify a filename for the transcript file, one will be automatically 
generated for you in  your Documents directory. Now run  a  couple of additional 
commands:
PS (3) > 2+2 
PS (4) > $psversiontable
Name                           Value 
----                           -----
CLRVersion                     2.0.50727.4200 
BuildVersion                   6.0.6002.18111 
PSVersion                      2.0 
WSManStackVersion              2.0 
PSCompatibleVersions           {1.0, 2.0} 
SerializationVersion           1.1.0.1 
PSRemotingProtocolVersion      2.1
Stop the transcript. Again, it conveniently tells you the name of the file containing 
the transcript: 
PS (5) > Stop-Transcript
Transcript stopped, output file is C:\Users\brucepay\Documents\ 
PowerShell_transcript.20100415221017.txt
Now let’s see what was captured:
PS (6) > Get-Content C:\Users\brucepay\Documents\PowerShell_transcript 
.20100415221017.txt
**********************
Windows PowerShell Transcript Start 
Start time: 20100415221017 
Username  : brucepayquad\brucepay 
Machine   : BRUCEPAYQUAD (Microsoft Windows NT 6.0.6002 Service Pack
2)
**********************
Transcript started, output file is C:\Users\brucepay\Documents\ 
PowerShell_transcript.20100415221017.txt 
PS (3) > 2+2 
PS (4) > $psversiontable
Name                           Value 
----                           -----
CLRVersion                     2.0.50727.4200 
BuildVersion                   6.0.6002.18111 
PSVersion                      2.0 
WSManStackVersion              2.0 
PSCompatibleVersions           {1.0, 2.0} 
SerializationVersion           1.1.0.1 
PSRemotingProtocolVersion      2.1
PS (5) > Stop-Transcript
**********************
Windows PowerShell Transcript End 
End time: 20100415221038
**********************
C# Word: How to Create Word Document Viewer in C#.NET Imaging
Offer mature Word file page manipulation functions (add, delete & reorder pages) in document viewer; (Directly see online document viewer demo here.).
how to rearrange pages in pdf document; how to reorder pages in pdf file
VB.NET TIFF: VB.NET Sample Code to Process & Manage TIFF Page
certain TIFF page, and sort & reorder TIFF pages in Process TIFF Pages Independently in VB.NET Code. powerful & profession imaging controls, PDF document, image
how to rearrange pdf pages online; reorder pages in pdf document
C
APTURING
SESSION
OUTPUT
595
The transcript file includes a header showing you the start time, the name of the user 
running the script, and the name and 
OS
information about the computer on which 
the command is run.
You see the filename yet again because it was written out after transcription was 
turned on and so is captured in the transcript. 
After  that,  you  see  the  output  of  the  commands  you  ran  (including 
Stop-
Transcript
) and then finally a trailer showing the time the transcript stopped.
14.4.2
What gets captured in the transcript
It seems obvious that everything should get captured in the transcript file, but that 
isn’t the case. As mentioned earlier, the transcript captures everything written through 
the host 
API
s that were described in section 14.3. What doesn’t get captured is any-
thing that bypasses these 
API
s and writes directly to the console. This missing infor-
mation is most significant when you’re running applications like 
ipconfig.exe
. If 
these commands aren’t redirected within PowerShell, then their output goes directly 
to the console and bypasses the host 
API
s. Let’s see how this looks. Start a new tran-
script that writes to a different file (a new filename is generated each time):
PS (1) > Start-Transcript
Transcript started, output file is C:\Users\brucepay\Documents\PowerS 
hell_transcript.20100415222650.txt
Run two commands, one of which uses 
cmd
to echo something directly to the console:
PS (2) > cmd /c echo THIS WONT BE CAPTURED
THIS WONT BE CAPTURED 
PS (3) > "This will"
This will
Now, stop the transcript and look at the output:
PS (4) > Stop-Transcript
Transcript stopped, output file is C:\Users\brucepay\Documents\ 
PowerShell_transcript.20100415222650.txt 
PS (5) > Get-Content C:\Users\brucepay\Documents\PowerShell_transcript 
.20100415222650.txt
**********************
Windows PowerShell Transcript Start 
Start time: 20100415222650 
Username  : brucepayquad\brucepay 
Machine   : BRUCEPAYQUAD (Microsoft Windows NT 6.0.6002 Service Pack
2)
**********************
Transcript started, output file is C:\Users\brucepay\Documents\ 
PowerShell_transcript.20100415222650.txt 
PS (2) > cmd /c echo THIS WONT BE CAPTURED 
PS (3) > "This will"
This will 
PS (4) > Stop-Transcript
**********************
596
CHAPTER 14
E
RRORS
AND
EXCEPTIONS
Windows PowerShell Transcript End
End time: 20100415222708
**********************
You see the same headers and trailers as before, but notice that the 
cmd
command is 
run but there’s no output for it. Because 
cmd
wrote directly to the console buffer, the 
transcript mechanism didn’t capture it. The way to make sure that you do capture the 
output of this kind of command is to pipe it through 
Write-Host
, forcing it to go 
through the host 
API
s. Here’s what that looks like:
PS (7) > Start-Transcript
Transcript started, output file is C:\Users\brucepay\Documents\ 
PowerShell_transcript.20100415223336.txt 
PS (8) > cmd /c echo THIS WILL BE CAPTURED 2>&1 | Write-Host 
THIS WILL BE CAPTURED 
PS (9) > Stop-Transcript 
Transcript stopped, output file is C:\Users\brucepay\Documents\ 
PowerShell_transcript.20100415223336.txt 
PS (10) > Get-Content  C:\Users\brucepay\Documents\ 
PowerShell_transcript.20100415223336.txt
**********************
Windows PowerShell Transcript Start 
Start time: 20100415223336 
Username  : brucepayquad\brucepay 
Machine   : BRUCEPAYQUAD (Microsoft Windows NT 6.0.6002 Service Pack
2)
**********************
Transcript started, output file is C:\Users\brucepay\Documents\ 
PowerShell_transcript.20100415223336.txt 
PS (8) > cmd /c echo THIS WILL BE CAPTURED 2>&1 | write-host 
THIS WILL BE CAPTURED 
PS (9) > Stop-Transcript
**********************
Windows PowerShell Transcript End 
End time: 20100415223410
**********************
This time, when you look at the transcript, you can see that the output of command 
8 was captured in the transcript.
Using the transcript cmdlets, it’s easy to have the remote user capture the output 
of their session. Simply  have  the  remote  user call 
Start-Transcript
, run their 
script, and then call 
Stop-Transcript
. This process will produce a transcript file 
that the user can send to you for examination.
Session transcripts are a handy way to capture what’s going on with a script, but 
they require someone to actively call them to get the transcript. There’s another place 
where activity is recorded continuously, including for PowerShell: the event log. The 
event log is the central store for log messages from the system as well as from all the 
applications, services, and drivers running on that machine. It’s a one-stop shop for 
diagnostic information. We’ll see how to access this diagnostic treasure trove using 
PowerShell in the final section in this chapter.
P
OWER
S
HELL
AND
THE
EVENT
LOG
597
14.5
P
OWER
S
HELL
AND
THE
EVENT
LOG
And now, the final topic in this chapter: exploring the Windows event log using 
PowerShell. 
The Windows event log provides a central place where applications and operating 
system components can record events like the starting and stopping of an operation, 
progress, and especially system and application errors. For system administration, 
having access to the event log is critical. Obviously, as an admin tool, PowerShell 
support for the event log is very important so that’s what we’re going to look at in 
this section.  
14.5.1
The EventLog cmdlets
PowerShell v1 had only a single, fairly limited command (
Get-EventLog
) for work-
ing with the event log. More sophisticated operations required using the underlying 
.
NET
classes. PowerShell v2 fills in this gap and provides a comprehensive set of cmd-
lets for working with the event log, as shown in table 14.3.
Table 14.3 The PowerShell EventLog cmdlets
Cmdlet name
PowerShell version
Description
Get-EventLog
v1, enhanced in v2
Gets the events in an event log, or a list of the event 
logs, on the local or remote computers
Clear-EventLog
v2
Deletes all entries from specified event logs on the 
local or remote computers
Write-EventLog
v2
Writes a new event log entry to the specified event 
log on the local or remote computer
Limit-EventLog
v2
Sets the event log properties that limit the size of 
the event log and the age of its entries
Show-EventLog
v2
Displays the event logs of the local or a remote com-
puter using the event viewer MMC console
New-EventLog
v2
Creates a new event log and a new event source on 
a local or remote computer
Remove-EventLog
v2
Deletes an event log or unregisters an event source
Show-EventLog
You might be wondering why PowerShell includes this cmdlet—all it does is launch 
the event log viewer. The answer is simple: usability. PowerShell is a command-line 
shell, so you should be able to launch GUI applications from the command line. You 
can, of course, but there’s a small problem: most of the commands you want to run, 
especially GUI commands, have names that aren't obvious. For example, to launch 
the control panel applet for adding and removing software, you run appwiz.cpl. To
598
CHAPTER 14
E
RRORS
AND
EXCEPTIONS
The 
Get-EventLog
cmdlet is what we’ll focus our attention on here. This cmdlet 
allows you to retrieve a list of the available application and system event logs and then 
look at the content of each of the logs. To get a list of the available logs, run 
Get-
EventLog -List
. The output will look something like this:
PS (1) > Get-EventLog -List
Max(K) Retain OverflowAction        Entries Log
------ ------ --------------        ------- ---
20,480      0 OverwriteAsNeeded      42,627 Application
15,168      0 OverwriteAsNeeded           0 DFS Replication
20,480      0 OverwriteAsNeeded           0 HardwareEvents
512      7 OverwriteOlder              0 Internet Explorer
20,480      0 OverwriteAsNeeded           0 Key Management Service
8,192      0 OverwriteAsNeeded      11,695 Media Center
16,384      0 OverwriteAsNeeded          80 ODiag
15,360      0 OverwriteAsNeeded         101 Operations Manager
16,384      0 OverwriteAsNeeded         790 OSession
20,480      0 OverwriteAsNeeded      34,798 Security
20,480      0 OverwriteAsNeeded      47,875 System
15,360      0 OverwriteAsNeeded      11,988 Windows PowerShell
In addition to the names of the various logs, you can see the configuration settings for 
each log, such as the amount of space the log might take and what happens when the 
log fills up.  You can use the 
Limit-EventLog
cmdlet to change these limits for a log:
PS (4) > Limit-EventLog -LogName Application -MaximumSize 256kb
Then verify that the limit has been changed:
PS (6) > Get-EventLog -List | where {$_.Log -match "application"}
Max(K) Retain OverflowAction        Entries Log
------ ------ --------------        ------- ---
256      0 OverwriteAsNeeded      42,627 Application
As well as listing the available logs, 
Get-EventLog
lets you see the events in any log. 
Because the event logs can be very large, the cmdlet supports a variety of options to 
control the amount of data returned. The parameters to 
Get-EventLog
are shown in 
figure 14.18.
(continued)
change the display settings, run desk.cpl. These command names, though related to 
their function, are certainly not obvious to a user. Similarly, the command to start the 
event viewer is eventvwr.msc. In contrast, the Show-EventLog cmdlet, which fol-
lows the PowerShell naming guidelines, can easily be intuited once you know the 
rules. The next question is, why provide a cmdlet instead of an alias? Because, as 
well as command naming, a cmdlet provides standard parameter handling, which 
allows for things like tab completion. So by providing a “shim” cmdlet for the exist-
ing application, one more small bump is removed from the command-line user’s 
experience.
P
OWER
S
HELL
AND
THE
EVENT
LOG
599
Table 14.4 describes the various 
Get-EventLog
filter parameters in more detail.
Table 14.4 The types of filters provided by the Get-EventLog cmdlet
Filter
Description
Source
The -Source parameter allows you to filter log entries based on the name used to 
register the event source. This name is usually the name of the application logging 
the events, but for larger applications, it may be the name of a subcomponent 
within that application. 
Message
The -Message parameter allows the retrieved entries to be filtered based on the 
event’s message text. The specified filter strings may contain wildcard patterns. 
(Note that because the text of a message is usually translated, the use of the 
-Message filter may not be portable to different locations.)
InstanceID
The InstanceId for an entry is the message resource identifier for the event. 
This identifier is used to retrieve the localized text for a message from the resource 
file for the registered event source. Because this identifier isn’t localized, the 
-InstanceID parameter provides a way to filter events by message that’s 
portable across locales because the message text is localized but the resource 
ID is always the same value. 
EntryType
The entry type (or severity level) is a way of classifying events based on the poten-
tial impact of the corresponding event on the system’s behavior. The entry types 
are Information, Warning, Error, and Critical. Two additional event types 
can occur in the security log: Success Audit and Failure Audit.
User
The -User parameter filters based on the name of the user on whose behalf the 
event occurred. Wildcards patterns can be used in arguments to this parameter.
Get-EventLog 
[-LogName] <logname> 
[-Computer Name <list of computers>]
[[-InstanceId] <Int64[]>]    
[-Newest <n>] 
[-After <startDate>] 
[-Before <endDate>] 
[-UserName <list of wildcard patterns>]
[-Index <index>] 
[-EntryType <list of types>] 
[-Source <list of source ids>]
[-Message <wildcard pattern>]  
Name of event log to read
from on target computer
Target computers to
get events from 
Message resource
IDs identifying 
entries to retrieve
Only return <n>
newest events
Only get events
where user name 
matches one of
specified patterns
Date range of
records to retrieve
Index of specific
event in log to get 
Types of events
to get 
Retrieve events
with matching
source identifiers
Only return log entries where message
text matches specified pattern
Figure 14.18 The 
Get-EventLog
cmdlet has a large number of parameters that allow 
you to control where the events are retrieved from and which events are to be retrieved. 
You can use event type, number, and date range to control the number of events retrieved 
and filter those events by username or strings in the event message.
Documents you may be interested
Documents you may be interested